有没有:焕、锦、有、宝的,这是哪一支啊,我就是(有)字辈的⋯⋯

认祖归宗,有清朝末年从江西省临江府十字街大桥头迁出的毛姓族人吗?现在知道的字辈只有:应,大,兴,顺_百度知道
认祖归宗,有清朝末年从江西省临江府十字街大桥头迁出的毛姓族人吗?现在知道的字辈只有:应,大,兴,顺
我这一辈在顺字辈之后,单名
提问者采纳
.....我姓毛
我们祖先也是清末从临江府十字街大头桥迁出的
我们字辈有四十个
我只记得几个
文成天兴顺
提问者评价
非常感谢。
采纳率100%
其他类似问题
为您推荐:
清朝末年的相关知识
其他2条回答
知道⋯⋯⋯⋯⋯⋯&#8943
我有一朋友中间是亚字
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁其他奇技淫巧陆续更新中……&br&===========================&br&&b&SPFA (Shortest Path Faster Algorithm)&/b&&br&说到单源最短路径,大家常常会想到的是Dijkstra算法(发音:&a href=&///?target=https%3A//upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& 荷兰语:['?tsx?r '?ib? 'd?ikstra] &i class=&icon-external&&&/i&&/a&)。但是对于带有负权的单源最短路径的话,可能就只能求助于Bellman Ford算法了。但是BF算法的时间复杂度是&img src=&///equation?tex=O%28VE%29& alt=&O(VE)& eeimg=&1&&,有没有更快的解决办法呢?&br&这里就要介绍一下西南交通大学的段凡丁于1994年发表的《关于最短路径的SPFA快速算法》了。SPFA算法的在该篇文章中的期望时间复杂度&img src=&///equation?tex=O%28E%29& alt=&O(E)& eeimg=&1&&的证明据说是错误的,但是因为其杰出的实际运行效率和简单的实现而让ACMer都推崇备至。&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&n&&SPFA&/span&&span class=&p&&(&/span&&span class=&n&&G&/span&&span class=&p&&,&/span& &span class=&n&&s&/span&&span class=&p&&)&/span&&span class=&o&&:&/span&
&span class=&k&&for&/span& &span class=&n&&each&/span& &span class=&n&&vertex&/span& &span class=&n&&v&/span& &span class=&n&&in&/span& &span class=&n&&G&/span&&span class=&p&&.&/span&&span class=&nl&&V&/span&&span class=&p&&:&/span&
&span class=&n&&v&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&o&&=&/span& &span class=&err&&∞&/span&
&span class=&n&&s&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&n&&push&/span& &span class=&n&&s&/span& &span class=&n&&into&/span& &span class=&n&&Q&/span&
&span class=&k&&while&/span& &span class=&n&&Q&/span& &span class=&n&&is&/span& &span class=&n&&not&/span& &span class=&nl&&empty&/span&&span class=&p&&:&/span&
&span class=&n&&pop&/span& &span class=&n&&u&/span& &span class=&n&&from&/span& &span class=&n&&Q&/span&
&span class=&k&&for&/span& &span class=&n&&each&/span& &span class=&n&&edge&/span& &span class=&p&&(&/span&&span class=&n&&u&/span&&span class=&p&&,&/span& &span class=&n&&v&/span&&span class=&p&&)&/span& &span class=&n&&in&/span& &span class=&n&&G&/span&&span class=&p&&.&/span&&span class=&nl&&E&/span&&span class=&p&&:&/span&
&span class=&k&&if&/span& &span class=&n&&u&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&o&&+&/span& &span class=&n&&w&/span&&span class=&p&&(&/span&&span class=&n&&u&/span&&span class=&p&&,&/span& &span class=&n&&v&/span&&span class=&p&&)&/span& &span class=&o&&&&/span& &span class=&n&&v&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&nl&&then&/span&&span class=&p&&:&/span&
&span class=&n&&v&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&o&&=&/span& &span class=&n&&u&/span&&span class=&p&&.&/span&&span class=&n&&d&/span& &span class=&o&&+&/span& &span class=&n&&w&/span&&span class=&p&&(&/span&&span class=&n&&u&/span&&span class=&p&&,&/span& &span class=&n&&v&/span&&span class=&p&&)&/span&
&span class=&k&&if&/span& &span class=&n&&v&/span& &span class=&n&&is&/span& &span class=&n&&not&/span& &span class=&n&&in&/span& &span class=&n&&Q&/span& &span class=&nl&&then&/span&&span class=&p&&:&/span&
&span class=&n&&push&/span& &span class=&n&&v&/span& &span class=&n&&into&/span& &span class=&n&&Q&/span&
&/code&&/pre&&/div&Dijkstra算法中的队列保存的是所有未确定的点,所以需要每次从中选取最短路径估计最小的顶点的邻边来进行松弛。而SPFA算法中的队列保存的是所有松弛过的边对应的顶点。上述两种算法与BF算法相比,优势都体现在不是盲目地对所有边进行松弛,故可以得到比BF算法更好的性能结果。&br&但是Dijkstra算法中的最短路相当于在一点一点“生长”,如果出现负权边,那么个生长的过程就需要绕回去,这对于Dijkstra算法来说是做不到的。而BF算法并不是依靠这种“生长”的办法,所以它可以做到这一点。因此,SPFA作为BF算法的队列优化版,解决了Dijkstra算法面对负权边的问题,又避免了BF算法在性能上的劣势,是一个实际运用中很受欢迎的算法。&br&&br&&b&跳表:&/b&&br&由于链表不是call-by-rank而是call-by-position的一类线性数据存储结构。所以链表的查找没有办法应用例如有序数组中二分查找一类的方法,只能通过线性搜索进行元素的查找。&br&而对于一个有序链表来说,如果我们可以在查询的时候先随机跳过大量元素,再逐步减少跳跃的幅度,锁定到我们最终查找的元素上时,那么我们的搜索成本将会得到极大地减少。&a href=&///?target=https%3A//en.wikipedia.org/wiki/Skip_list& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Skip list&i class=&icon-external&&&/i&&/a&就是运用这个原理设计出来的。&br&&img src=&/67cbd68f65667aff83ba0_b.png& data-rawwidth=&834& data-rawheight=&123& class=&origin_image zh-lightbox-thumb& width=&834& data-original=&/67cbd68f65667aff83ba0_r.png&&例如上图当中,如果要搜索数字19的话,需要从左侧头结点开始,跳到下一个结点21,发现21 & 19则跳回去到下一层。下一层下一个结点为9,再后面一个是21 & 19,又跳回9并下钻。下一个结点为17 & 19则继续后跳到21,再次发生21 & 19,则往回跳到17并下钻,最后到达待搜索的节点19的位置上。&br&跳表有着类似平衡BST的时间复杂度,而实现更简单,常系数更小,空间占用更小。这些特点常常使得它作为平衡BST的替代品被应用。&br&&br&&br&&b&平方根倒数速算法:&/b&&br&在利用到3D图形渲染的一些游戏或者程序当中,法向量的单位化计算显得尤为重要。在三维欧几里得空间当中,某一向量&img src=&///equation?tex=v%3D%28v_x%2Cv_y%2Cv_z%29& alt=&v=(v_x,v_y,v_z)& eeimg=&1&&的单位化是指计算&img src=&///equation?tex=v%5E%5Cprime+%3D+%5Cfrac%7Bv%7D%7B%7C%7Cv%7C%7C_2%7D& alt=&v^\prime = \frac{v}{||v||_2}& eeimg=&1&&。其中&img src=&///equation?tex=%7C%7Cv%7C%7C_2& alt=&||v||_2& eeimg=&1&&表示向量&img src=&///equation?tex=v& alt=&v& eeimg=&1&&的二范数,也即&img src=&///equation?tex=%7C%7Cv%7C%7C_2%3D%5Csqrt%7Bv%5E2_x%2Bv%5E2_y%2Bv%5E2_z%7D& alt=&||v||_2=\sqrt{v^2_x+v^2_y+v^2_z}& eeimg=&1&&。其中设&img src=&///equation?tex=x%3Dv%5E2_x%2Bv%5E2_y%2Bv%5E2_z& alt=&x=v^2_x+v^2_y+v^2_z& eeimg=&1&&,&img src=&///equation?tex=x& alt=&x& eeimg=&1&&的计算主要是乘法与加法,所以性能上不会有太大瓶颈。而计算&img src=&///equation?tex=v%5E%5Cprime+%3D+v+%5Ctimes+x%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D& alt=&v^\prime = v \times x^{-\frac{1}{2}}& eeimg=&1&&的时候,&img src=&///equation?tex=x%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D& alt=&x^{-\frac{1}{2}}& eeimg=&1&&数值求解的速度如何将会极大影响向量单位化的运行效率。平方根倒数速算法正是为了解决这个问题而出现的。&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&float&/span& &span class=&nf&&Q_rsqrt&/span&&span class=&p&&(&/span&&span class=&kt&&float&/span& &span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&float&/span& &span class=&n&&x2&/span& &span class=&o&&=&/span& &span class=&n&&x&/span& &span class=&o&&*&/span& &span class=&mf&&0.5F&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&i&/span&
&span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&)&/span&&span class=&o&&&&/span&&span class=&n&&x&/span&&span class=&p&&;&/span& &span class=&c1&&// evil floating point bit level hacking&/span&
&span class=&n&&i&/span&
&span class=&o&&=&/span& &span class=&mh&&0x5f3759df&/span& &span class=&o&&-&/span& &span class=&p&&(&/span&&span class=&n&&i&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&c1&&// what the fuck?&/span&
&span class=&n&&x&/span&
&span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&kt&&float&/span&&span class=&o&&*&/span&&span class=&p&&)&/span&&span class=&o&&&&/span&&span class=&n&&i&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span&
&span class=&o&&=&/span& &span class=&n&&x&/span& &span class=&o&&*&/span& &span class=&p&&(&/span&&span class=&mf&&1.5F&/span& &span class=&o&&-&/span& &span class=&p&&(&/span&&span class=&n&&x2&/span& &span class=&o&&*&/span& &span class=&n&&x&/span& &span class=&o&&*&/span& &span class=&n&&x&/span&&span class=&p&&));&/span& &span class=&c1&&// 1st iteration&/span&
&span class=&k&&return&/span& &span class=&n&&x&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&这个方法从本质上来介绍的话,就是先近似计算一个初始值,然后带入牛顿迭代法来计算最后的较为精确的&img src=&///equation?tex=x%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D& alt=&x^{-\frac{1}{2}}& eeimg=&1&&。涉及的中间变量有&img src=&///equation?tex=x%5Cto+-%5Cfrac%7B1%7D%7B2%7D%5Clog_2%7Bx%7D%3D+%5Clog_2%7Bx%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D%7D%5Cto+x%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D& alt=&x\to -\frac{1}{2}\log_2{x}= \log_2{x^{-\frac{1}{2}}}\to x^{-\frac{1}{2}}& eeimg=&1&&。首先计算i = *(int*)&x是为了获得浮点数&img src=&///equation?tex=x& alt=&x& eeimg=&1&&对应的整数表示&img src=&///equation?tex=I_x& alt=&I_x& eeimg=&1&&。然后利用&img src=&///equation?tex=I_x& alt=&I_x& eeimg=&1&&去求出&img src=&///equation?tex=%5Clog_2%7By%7D%3D-%5Cfrac%7B1%7D%7B2%7D%5Clog_2%7Bx%7D& alt=&\log_2{y}=-\frac{1}{2}\log_2{x}& eeimg=&1&&中&img src=&///equation?tex=y& alt=&y& eeimg=&1&&对应的整数表示&img src=&///equation?tex=I_y& alt=&I_y& eeimg=&1&&,这也就是上述注释“what the fuck”对应的那句i
= 0x5f3759df - (i && 1)的作用。&br&求得了整数表示&img src=&///equation?tex=I_y& alt=&I_y& eeimg=&1&&以后,将该数转换回浮点数,也即求到了&img src=&///equation?tex=y%3Dx%5E%7B-%5Cfrac%7B1%7D%7B2%7D%7D& alt=&y=x^{-\frac{1}{2}}& eeimg=&1&&的近似值。最后一句使用牛顿迭代法对&img src=&///equation?tex=y%5E2-%5Cfrac%7B1%7D%7Bx%7D%3D0& alt=&y^2-\frac{1}{x}=0& eeimg=&1&&进行一遍迭代求解,也就是将上面得到的&img src=&///equation?tex=y& alt=&y& eeimg=&1&&带入牛顿迭代法的公式当中作为初始值计算一遍,最后得到较为精确的结果。&br&这个算法的核心地方在于如何利用&img src=&///equation?tex=%5Clog_2%7By%7D%3D-%5Cfrac%7B1%7D%7B2%7D%5Clog_2%7Bx%7D& alt=&\log_2{y}=-\frac{1}{2}\log_2{x}& eeimg=&1&&这一等式得到&img src=&///equation?tex=I_x& alt=&I_x& eeimg=&1&&与&img src=&///equation?tex=I_y& alt=&I_y& eeimg=&1&&的关系,而这也就是0x5f3759df的重要意义所在。具体的数学推导以及中间的“魔数”0x5f3759df是怎么算出来的可以参见维基百科&a href=&///?target=https%3A//en.wikipedia.org/wiki/Fast_inverse_square_root& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fast inverse square root&i class=&icon-external&&&/i&&/a&。&br&&br&&b&珠排序:&/b&&br&珠排序作为一种自然排序算法,在计算机当中没有办法找到一种很好的实现来进行模拟,但是,并且只能为正整数序列进行排序。但是其中的思路却真的算是一种奇技淫巧了。&br&对&img src=&///equation?tex=n& alt=&n& eeimg=&1&&个正整数&img src=&///equation?tex=%5C%7Bk_i%7Ci%3D1%2C2%2C%5Ccdots+n%5C%7D& alt=&\{k_i|i=1,2,\cdots n\}& eeimg=&1&&进行排序的话,我们就造&img src=&///equation?tex=m%3Dmax%5C%7Bk_i%5C%7D& alt=&m=max\{k_i\}& eeimg=&1&&根柱子。然后对于每一个正整数&img src=&///equation?tex=k_i& alt=&k_i& eeimg=&1&&,我们就把它想象成&img src=&///equation?tex=k_i& alt=&k_i& eeimg=&1&&个珠子。我们将这&img src=&///equation?tex=k_i& alt=&k_i& eeimg=&1&&个珠子分别串在在第1根、第2根、……第&img src=&///equation?tex=k_i& alt=&k_i& eeimg=&1&&根柱子上。&br&&img src=&/dffbd17c1c59aebbceac66_b.png& data-rawwidth=&131& data-rawheight=&166& class=&content_image& width=&131&&&br&所有数都串完了以后,将这&img src=&///equation?tex=m& alt=&m& eeimg=&1&&根柱子垂直放置下来,所有珠子都随重力下落,然后每行上(不是每根柱子上)的珠子数,就是最后的排序结果。&br&&img src=&/d4e3807f0fba4c450e7a31f_b.png& data-rawwidth=&121& data-rawheight=&149& class=&content_image& width=&121&&&br&&br&&b&Duff's Device:&/b&&br&从一个指针from向另一个指针to拷贝count个字节,你打算怎么做?&br&正常的做法是&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&do&/span& &span class=&p&&{&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span& &span class=&k&&while&/span&&span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&count&/span& &span class=&o&&&&/span& &span class=&mi&&0&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&这段代码当中,这句--count & 0的会被判断count次。&br&那么真的需要判断这么多次么?让我们来看看Duff's Device的实现是怎么做的&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&void&/span& &span class=&nf&&send&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&count&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&n&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&n&&count&/span& &span class=&o&&+&/span& &span class=&mi&&7&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&mi&&8&/span&&span class=&p&&;&/span&
&span class=&k&&switch&/span& &span class=&p&&(&/span&&span class=&n&&count&/span& &span class=&o&&%&/span& &span class=&mi&&8&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&case&/span& &span class=&mi&&0&/span& &span class=&o&&:&/span&
&span class=&k&&do&/span& &span class=&p&&{&/span& &span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&7&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&6&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&5&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&4&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&3&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&2&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&mi&&1&/span& &span class=&o&&:&/span&
&span class=&o&&*&/span&&span class=&n&&to&/span&&span class=&o&&++&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&from&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span& &span class=&k&&while&/span& &span class=&p&&(&/span&&span class=&o&&--&/span&&span class=&n&&n&/span& &span class=&o&&&&/span& &span class=&mi&&0&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&这段代码巧妙地将switch和while杂糅在一起,不仅每次8个字节进行拷贝,而且对末尾不足8个字节的部分做了精巧的处理,通过循环展开减少了循环判断的次数,从而优化了性能。&br&&br&&b&尾递归:&/b&&br&给你一个单链表的头结点,让你得到这条链表的长度是多少,要求用递归进行编写的话,你会怎么做呢?&br&正常的做法是&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&int&/span& &span class=&nf&&linked_list_length&/span&&span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&head&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&head&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&==&/span& &span class=&nb&&NULL&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&k&&else&/span&
&span class=&k&&return&/span& &span class=&n&&linked_list_length&/span&&span class=&p&&(&/span&&span class=&n&&head&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&)&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&这段代码的问题在于什么呢?如果链表非常长的话,成百上千次的递归压栈将会耗尽栈空间,造成栈溢出。如果我们使用尾递归的话,就可以这样&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&int&/span& &span class=&nf&&linked_list_length&/span&&span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&head&/span&&span class=&p&&,&/span& &span class=&kt&&int&/span& &span class=&n&&len&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&head&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&==&/span& &span class=&nb&&NULL&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&len&/span&&span class=&p&&;&/span&
&span class=&k&&else&/span&
&span class=&k&&return&/span& &span class=&n&&linked_list_length&/span&&span class=&p&&(&/span&&span class=&n&&head&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&,&/span& &span class=&n&&len&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&尾递归与普通递归最大的区别在于,整个递归调用占据了整个return后面的部分。由于它在整个方法的最后才被调用,那么之前函数压栈保留的所有局部变量等等信息都不影响下一次递归调用,所以本次方法中栈内的信息可以被清空,让下次调用可以重复使用这段栈空间。&br&所以尾递归的本质,其实就是将这次递归方法当中的必要信息,传递到下次递归当中,从而保证return后面是一个完整的递归函数调用而不是一个表达式。&br&&br&&b&二级指针删除单向链表中结点:&/b&&br&这个利用二级指针(pointers-to-pointers)优化单向链表当中的删除操作,是Linus在&a href=&///?target=http%3A//meta.slashdot.org/story/12/10/11/0030249/linus-torvalds-answers-your-questions& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linus Torvalds Answers Your Questions&i class=&icon-external&&&/i&&/a&上就什么才是真正的“core low-level kind of coding”所提出的一个例子。当你要写一个单向链表当中根据某个特定条件来剔除结点的函数,你会怎么写呢?&br&正常的做法是&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&k&&typedef&/span& &span class=&nf&&bool&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&remove_fn&/span&&span class=&p&&)(&/span&&span class=&k&&const&/span& &span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&n&/span&&span class=&p&&);&/span&
&span class=&kt&&void&/span& &span class=&nf&&remove_if&/span&&span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&head&/span&&span class=&p&&,&/span& &span class=&n&&remove_fn&/span& &span class=&n&&rm&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&prev&/span& &span class=&o&&=&/span& &span class=&nb&&NULL&/span&&span class=&p&&,&/span& &span class=&o&&*&/span&&span class=&n&&curr&/span& &span class=&o&&=&/span& &span class=&n&&head&/span&&span class=&p&&;&/span& &span class=&n&&curr&/span& &span class=&o&&!=&/span& &span class=&nb&&NULL&/span&&span class=&p&&;&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&node&/span&&span class=&o&&*&/span& &span class=&n&&next&/span& &span class=&o&&=&/span& &span class=&n&&curr&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&rm&/span&&span class=&p&&(&/span&&span class=&n&&curr&/span&&span class=&p&&))&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&prev&/span&&span class=&p&&)&/span& &span class=&n&&prev&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&=&/span& &span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&k&&else&/span& &span class=&n&&head&/span& &span class=&o&&=&/span& &span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&k&&delete&/span& &span class=&n&&curr&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&else&/span&
&span class=&n&&prev&/span& &span class=&o&&=&/span& &span class=&n&&curr&/span&&span class=&p&&;&/span&
&span class=&n&&curr&/span& &span class=&o&&=&/span& &span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&其中remove_fn是一个函数指针类型,表示判断是否删除结点的条件。这里的实现通过维护一个prev指针来进行结点的删除,需要判断prev是否为NULL来确定当前删除的结点是不是头结点。这种实现方式是被Linus所唾弃的“This person doesn’t understand pointers”。那么使用二级指针对上述代码进行优化的话,就是&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&kt&&void&/span& &span class=&nf&&remove_if&/span&&span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&**&/span&&span class=&n&&head&/span&&span class=&p&&,&/span& &span class=&n&&remove_fn&/span& &span class=&n&&rm&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&n&&node&/span& &span class=&o&&**&/span&&span class=&n&&curr&/span& &span class=&o&&=&/span& &span class=&n&&head&/span&&span class=&p&&;&/span& &span class=&o&&*&/span&&span class=&n&&curr&/span&&span class=&p&&;&/span& &span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&node&/span& &span class=&o&&*&/span&&span class=&n&&entry&/span& &span class=&o&&=&/span& &span class=&o&&*&/span&&span class=&n&&curr&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&rm&/span&&span class=&p&&(&/span&&span class=&n&&entry&/span&&span class=&p&&))&/span&
&span class=&p&&{&/span&
&span class=&o&&*&/span&&span class=&n&&curr&/span& &span class=&o&&=&/span& &span class=&n&&entry&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&k&&delete&/span& &span class=&n&&entry&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&k&&else&/span&
&span class=&n&&curr&/span& &span class=&o&&=&/span& &span class=&o&&&&/span&&span class=&n&&entry&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&上述代码的重点在于二级指针curr。循环开始时,二级指针curr指向头结点的指针。如果头结点是需要删除的结点的话,*curr=entry-&next就相当于*head=(*head)-&next,也即修改头结点的指针指向下一个结点。&br&如果要删除的节点不是头结点的话,由于curr是通过&entry-&next更新的,所以要此时curr指向要删除的节点的上一个节点的next指针,而entry指向的是要当前要删除的指针,此时*curr=entry-&next就相当于prev-&next=entry-&next,从而完成当前节点的删除。&br&&br&欢迎关注:&br&&img src=&/cdfa915a02a5f6f938fad_b.png& data-rawwidth=&300& data-rawheight=&300& class=&content_image& width=&300&&
其他奇技淫巧陆续更新中……===========================SPFA (Shortest Path Faster Algorithm)说到单源最短路径,大家常常会想到的是Dijkstra算法(发音:)。但是对于带有负权的单源最短路…
&b&收藏的时候记得也要赞哟么么嗒(=??`)人(??`=)&/b&&br&&br&&br&&b&多图!!!!多图!!!&/b&&br&&b&有很多很多品牌有超薄性感文胸!!!!!!样子都很好看啊啊啊!!(已经入坑)&/b&&br&&br&&br&&b&有钢圈超薄和无钢圈超薄,在我目前看到的一些都是没胸垫的,会凸点,但是好看啊!!好看就行!!贴个乳贴就ok!&/b&&br&&br&放几张图&br&&br&&b&Dream of me&/b&&br&&img data-rawheight=&475& data-rawwidth=&356& src=&/f62dcee1bb7d1_b.jpg& class=&content_image& width=&356&&&img data-rawheight=&475& data-rawwidth=&356& src=&/302b2be16be594e0b4520acc_b.jpg& class=&content_image& width=&356&&&br&&br&&b&DESIRE LACE UNDERWIRE BRA&/b&&br&&img data-rawheight=&750& data-rawwidth=&500& src=&/48beed3c0a54ec4196692_b.jpg& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/48beed3c0a54ec4196692_r.jpg&&&img data-rawheight=&750& data-rawwidth=&500& src=&/b3aacbfa5d2a745f8fe5bce_b.jpg& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/b3aacbfa5d2a745f8fe5bce_r.jpg&&&br&&br&&b&Sunkissed&/b&&br&&img data-rawheight=&433& data-rawwidth=&323& src=&/f28afde75eb2cd789130fdfd583d7006_b.jpg& class=&content_image& width=&323&&&img data-rawheight=&435& data-rawwidth=&325& src=&/0ddedac92d76fcadf0671ce4_b.jpg& class=&content_image& width=&325&&&br&&br&&b&Free people&/b&&br&&img data-rawheight=&400& data-rawwidth=&303& src=&/adc06fea296a3e0c020cc27_b.jpg& class=&content_image& width=&303&&&img data-rawheight=&469& data-rawwidth=&353& src=&/aff1d7aa0c8bf84cb59975_b.jpg& class=&content_image& width=&353&&&br&&br&&b&One Two&/b&&img data-rawheight=&475& data-rawwidth=&356& src=&/62ccf488f565e2d2d716_b.jpg& class=&content_image& width=&356&&&img data-rawheight=&475& data-rawwidth=&356& src=&/ad7ccaedc2f_b.jpg& class=&content_image& width=&356&&&br&&br&&b&Crystal Eyes&/b&&br&&br&&img data-rawheight=&431& data-rawwidth=&321& src=&/a373f99b27d882ba41958f_b.jpg& class=&content_image& width=&321&&&img data-rawheight=&436& data-rawwidth=&324& src=&/fbfb60ed1bcac153e835ca3_b.jpg& class=&content_image& width=&324&&&br&&br&&b&UNIF BADSPORT TRIANGLE BRA&/b&&br&&br&&img data-rawheight=&864& data-rawwidth=&640& src=&/40b3c2b76cfae5d4c1ca1c8eaec6f5ac_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/40b3c2b76cfae5d4c1ca1c8eaec6f5ac_r.jpg&&&img data-rawheight=&864& data-rawwidth=&640& src=&/62bd5bf174beb12_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/62bd5bf174beb12_r.jpg&&&br&&br&&b&LUDI FORGET ME NOT BRALETTE/WANTED & WILD&br&&/b&&br&&img data-rawheight=&959& data-rawwidth=&640& src=&/dc4be2c4d01_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/dc4be2c4d01_r.jpg&&&img data-rawheight=&959& data-rawwidth=&640& src=&/860edb3a38c6d0f245724d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/860edb3a38c6d0f245724d_r.jpg&&&br&&br&&b&Nasty Gal Shoot to Thrill Harness Bra&br&&/b&&br&&img data-rawheight=&961& data-rawwidth=&640& src=&/e4f0aef40fa79bb5b2be3f3df36f7bab_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/e4f0aef40fa79bb5b2be3f3df36f7bab_r.jpg&&&img data-rawheight=&961& data-rawwidth=&640& src=&/4ffddcdf4f7d71ac279ab24_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/4ffddcdf4f7d71ac279ab24_r.jpg&&&br&&br&&br&&b&还有很多品牌都有,就不一一放了,没有地址,大家慢慢找吧~~&/b&
收藏的时候记得也要赞哟么么嗒(=??`)人(??`=)多图!!!!多图!!!有很多很多品牌有超薄性感文胸!!!!!!样子都很好看啊啊啊!!(已经入坑)有钢圈超薄和无钢圈超薄,在我目前看到的一些都是没胸垫的,会凸点,但是好看啊!!好看就行…
应用层面的优化变化太多,比较难总结出系统的方法。各种通用知识更像一本字典,实际中需要根据情景选择使用。与其后手优化,最好能先手写出高性能的代码。在此简单整理一下重点。&br&&br&首先说一下比较上层的原则:&br&&ol&&li&最重要的是准确测量。&/li&&li&相较于优化代码,更重要的是对程序性能持续不断的管理。&/li&&li&深度优化往往意味着牺牲代码抽象。&/li&&/ol&随便看几本优化方面的书,基本都会从测量开始讲。测量的难度很容易被低估,思路是解决两个问题:1. 测什么。2. 用什么测。&br&&br&“测什么”考验你对应用的性能模型是否有很好的理解。比如优化C#的内存性能,需要测什么?峰值大小,还是平均工作集大小?1代对象大小还是2代对象大小,还是LOH大小?需不需要测Page Fault?这些问题根据应用的不同答案都是不同的,能根据情景定位到正确的测量目标是很重要的能力。&br&&br&“用什么测”是工具的问题。Profiler是最简单的,但是离开了debug环境很有可能就不适用了。比如某个问题只能在部署环境下重现,如何测量?这就需要对各种工具有一定了解,比如利用Performance Counter或ETW+PrefView/CLR Profiler来定位瓶颈,用WinDbg具体分析内存问题和并发性能问题等等。微软的工具有比较完善的手册和教程来系统地学习,不过学习曲线也是比较陡的。&br&&br&软件开发中缺陷发现的越早,修复的成本也越低,这个定律同样适合于性能上的缺陷。持续的性能管理可以明显减轻优化的负担,很多低效的设计在大规模使用之前就能得到修正。这个更多是团队文化的问题,常常也是身不由己,不展开说了。&br&&br&深度优化与代码抽像之间的矛盾也是显而易见的。例如虚函数,虚函数会使JIT内联优化失效,但是否采用虚函数设计也要看具体情况。如果是内部代码,性能也非常敏感,可以考虑放弃虚函数。但是供第三方使用的类库,对扩展性和易用性的需求可能就更重要。而且这种深度优化,在其他部分已经没什么油水可榨的时候才需要考虑,实际上大部分程序都不用轮到牺牲抽象就可以表现的足够好。&br&&br&抛开通用的算法优化,具体到C#优化方面的知识,重点有几大块:&br&&ol&&li&对GC的优化。&/li&&li&对JIT的优化。&/li&&li&对并发的优化。&/li&&li&对.NET框架的理解。&/li&&li&语言机制上的优化。&/li&&li&跨平台优化。&/li&&/ol&下面简单展开。&br&&br&GC和JIT是C#/.NET的一个很重要的特征,也是性能问题频繁发生的地方。GC和JIT属于Runtime层面的服务,代码上并不能直接控制,所以优化的思路集中在&b&理解&/b&和&b&适应&/b&上,扬长避短是重点。对于GC,要理解CLR的GC算法,算法本身理解起来并不困难,主要关注几个方面:&br&&ol&&li&0、1、2代对象和LOH是什么。&/li&&li&GC发生的时机和大致过程。&/li&&li&GC挂起的时间跟哪些因素有关。&/li&&li&Pinning和析构函数对GC的负面作用。&/li&&/ol&比较深入的还有NoGCRegion,GC Notification等等。其实总结出来就是要管好对象的生命周期,要么速度滚到2代一辈子不被回收,要么在0代就立刻被回收掉,析构之类的其他机制仅在绝对必要时小规模使用。对象池一类的模式也都是基于这个原则。&br&&br&JIT优化主要两方面:启动时间和生成代码的优化。程序启动时会JIT编译大量代码,是.NET程序启动慢的普遍原因,优化需要精简启动代码,也可以利用NGEN,MPGO,ProfileOptimization一类工具。JIT在生成代码时最重要的优化是代码内联,很多写法会让内联优化失效,如果希望函数或属性内联,应避免:递归调用,IL代码超过32B,函数包含循环和异常处理,虚函数,接口类型在同一个call site可能有多种实现(这个最伤,不只没法内联),等等。&br&&br&另一大块是并发,这块很多语言无关的通用原则都适用。C#的重点是:&br&&ol&&li&理解托管线程模型,Thread,ThreadPool等。&/li&&li&会用TPL,性能方面要能够根据情况指定正确的creation options和continuation options。&/li&&li&能避免阻塞线程,比如避免Task.Wait,避免调用阻塞IO。&/li&&li&正确看待同步,加锁永远不会提高程序性能,最快的同步是没有同步。要写的话,Interlocked要会用,要明白Slim版的锁为什么好之类的。&/li&&/ol&&br&理解.NET。首先.NET是一个通用框架,相对于性能更注重易用性,不要过分相信它很快。对一个BCL类的实现不是很放心的时候,到Reference Source上看看源码(地址:&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reference Source&i class=&icon-external&&&/i&&/a&),时间长了会有不少收获。集合操作,IO这些常见的任务,.NET提供了多种不同的API,一些看似很方便的API性能其实可能是最差的。比如框架提供的N种集合,性能上有哪些不同,内部用二叉树还是哈希表,内存连续还是不连续,空间时间复杂的各是多少,这些都应该了解。&br&&br&编码上的优化。这个细节太多了,最最基础的、一定要掌握的是引用类型和值类型的区别,并且能懂得避免值类型boxing和避免分配不必要的引用类型实例。这个随便一搜资料就一大把,是C#基础中的基础。再列举几个细节:&br&&ul&&li&struct默认的Equals和GetHashCode是用反射实现的,如果不是blittable type,性能非常差,要override。&/li&&li&用explicit structure layout可以绕过反射从struct里偷private变量出来,非常快。&/li&&li&interface dynamic dispatch问题。之前说的同一个call site如果实现类型不一样可能会变慢的问题。最近发现Swift也有一样的问题,也许是多重继承的通病。具体参考:&a href=&///?target=http%3A///b/vancem/archive//550529.aspx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Digging into interface calls in the .NET Framework: Stub-based dispatch.&i class=&icon-external&&&/i&&/a&&/li&&li&不得不反射调用代码的时候可以考虑用IL动态生成一个强类型委托,频繁调用的开销基本能降到和普通方法同等水平。&/li&&/ul&类似这种小技巧非常非常多,当然很多都是以牺牲代码抽象为代价的。深度优化一定要确定值得再去做,判断依据还是测量数据。&br&&br&跨平台优化主要是考虑到C#如今已经可以运行在很多平台上,Windows,iOS,Android,Unity,WP,这些平台的C#实现或多或少有一些区别,对各种平台Runtime的实现有一定了解,才能有效地把这些优化技巧从一个平台迁移到另一个平台,写客户端的人可能感受比较深。&br&&br&C#优化方面的知识大概都是在这个框架之下的,最直接的获取方式还是平时多观察多解决问题。性能优化虽然有一些通用的原则,然而实际运用中能够落实到具体的语言和框架上才真正有用。
应用层面的优化变化太多,比较难总结出系统的方法。各种通用知识更像一本字典,实际中需要根据情景选择使用。与其后手优化,最好能先手写出高性能的代码。在此简单整理一下重点。首先说一下比较上层的原则:最重要的是准确测量。相较于优化代码,更重要的是…
&img data-rawheight=&440& data-rawwidth=&440& src=&/3516e42adf34c5f44e1c1be23a2ce3b1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&440& data-original=&/3516e42adf34c5f44e1c1be23a2ce3b1_r.jpg&&
&p&使用 Mac 已多年,沉淀了好一些好用的工具,有些比较偏极客,很多工具就是为了提高效率,&b&键盘流&/b&,&b&脚本流&/b&,&b&自动化流&/b&。&/p&&p&列举的应用虽然有些收费而且并不便宜。但是生产力工具贵不贵,真不能单纯看价钱,如果 ¥500的东西给你节省了20%的时间,这交易难道不划算吗?别抠几个钱,找到适合自己的最锋利的刀,分分钟赚回来。另外,提倡正版。&/p&&p&排名不分先后,想到哪个写哪个,多图。&/p&&br&&p&&b&很多人在私信里、评论里要一些别的应用的推荐或者使用建议。&/b&&/p&&p&&b&重复说不是程序员的风格,所以特地开了专栏来写,主要写 Mac/iPhone 平台上好用的工具与应用。&/b&&/p&&p&&b&需要的关注吧:&a class=&internal& href=&/scripts&&&span class=&invisible&&http://&/span&&span class=&visible&&/scri&/span&&span class=&invisible&&pts&/span&&span class=&ellipsis&&&/span&&/a&&/b&&br&&/p&&br&&p&&b&Delicious + Delibar&/b&&/p&&p&书签工具,配合美味书签简直不能更美味,免费。&/p&&ul&&li&推荐指数:★★★★★&/li&&li&效率提高:就打开网页这一动作而言,任何书签基本上缩减到 1~4s 内&br&&/li&&li&相关地址:&a class=& wrap external& href=&///?target=https%3A///& target=&_blank& rel=&nofollow noreferrer&&Delicious&i class=&icon-external&&&/i&&/a&,&a class=& wrap external& href=&///?target=http%3A///& target=&_blank& rel=&nofollow noreferrer&&Delibar, Delicious Mac client&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&如果你要打开知乎,你可能是打开浏览器 -& 点击地址栏 -& 输入 &a href=&& class=&internal&&&span class=&invisible&&http://&/span&&span class=&visible&&&/span&&span class=&invisible&&&/span&&/a& 回车,或者打开浏览器 -& 点击书签栏 -& 找到知乎书签,点击。&/p&&p&一点都不酷,我以前也是这样,当收藏的链接很多的时候,找书签就很费神,如果手动输入地址又很慢,还要考验记忆力。&/p&&p&在很早前就开始有各种书签工具了,取代现在用的目录树存储书签,「谷歌书签」和「美味书签」都是用「标签」(tag)来描述一个链接,这样的话就把书签的维度增加了,变得十分方便检索。&/p&&p&我把美味书签的「添加书签」(add to Delicious)放在书签栏,遇到喜欢的网页就点击,比方说我正在看的同人于野博客的页面,我收藏起来并打上相关标签:&/p&&img data-rawheight=&584& data-rawwidth=&1224& src=&/12aefdb56e57fb1c8104_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1224& data-original=&/12aefdb56e57fb1c8104_r.jpg&&&p&如上加了描述的标签,「geek, 同人于野, 方法论」,接下来我可以在 Delibar 中找到了。&/p&&p&我使用快捷键 ctrl + shift + space,打开了菜单栏的窗口,输入 标签就可以找到相关的链接了:&/p&&p&&img data-rawheight=&199& data-rawwidth=&381& src=&/45da40418deb1518463bdb4ec0f31e9e_b.jpg& class=&content_image& width=&381&&回车以后自动在默认浏览器打开。当标签有多个选择的时候,你可以继续输入第二个标签去限定,如:&/p&&img data-rawheight=&465& data-rawwidth=&379& src=&/5bffa8d483db2_b.jpg& class=&content_image& width=&379&&&p&「doc」很多,再输入「json」,&img data-rawheight=&206& data-rawwidth=&403& src=&/5c284ad2ef_b.jpg& class=&content_image& width=&403&&好好定义标签变成了技术活,疯狂吧骚年。&br&&/p&&br&&p&&b&Quiver&/b&&br&&/p&文档编辑器,¥68。评论有人问办公软件,顺手补充一个。&br&&ul&&li&推荐指数:★★★&/li&&li&效率提高:10~20%&/li&&li&相关地址:&a class=& wrap external& href=&///?target=https%3A///cn/app/quiver-programmers-notebook/idFmt%3D12& target=&_blank& rel=&nofollow noreferrer&&Mac App Store-Quiver: The Programmer's Notebook&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&支持 Markdown 的编辑器其实蛮多的,我之前用过包括 Mou,Lighter 等免费的,最后选择这个收费的,我给大伙上个图看下这家伙的编辑能力吧。&/p&&p&&img data-rawheight=&658& data-rawwidth=&931& src=&/17e8bbe7132ade9419dc2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&931& data-original=&/17e8bbe7132ade9419dc2_r.jpg&&编辑区中4个框分别是4种编辑类型,它支持 Markdown 与富文本、代码、公式混排。&/p&&p&上面的文档生成出来是这样的。&/p&&p&&img data-rawheight=&868& data-rawwidth=&555& src=&/ba7712678deada786314a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&555& data-original=&/ba7712678deada786314a_r.jpg&&它可以导出网页,只要导出网页你就可以导出 PDF。&/p&&p&它还支持用户修改样式,你觉得不够漂亮,你有更好的样式表,也可以贴进去。&/p&工作中需要经常混排公式跟代码的人不能错过。&br&&br&&p&&b&MindNode&/b&&/p&&p&最&b&好看&/b&的思维导图应用,我把 OSX 和 iOS 的都买了,¥128,有时候有活动,我当时买的¥68。&/p&&ul&&li&推荐指数:★★★★&/li&&li&效率提高:整理思路绝好工具,但流程图并不适用&br&&/li&&li&相关地址:&a class=& wrap external& href=&///?target=https%3A///cn/app/mindnode-pro/idFmt%3D12& target=&_blank& rel=&nofollow noreferrer&&Mac App Store-MindNode Pro&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&它就是个思维导图,能自定义背景,样式,默认的已经很漂亮,图。&/p&&p&&img data-rawheight=&462& data-rawwidth=&948& src=&/c2132e37cce13ab3e8436421_b.jpg& class=&origin_image zh-lightbox-thumb& width=&948& data-original=&/c2132e37cce13ab3e8436421_r.jpg&&这是我之前看《如何高效的学习》做的笔记,图中的每个叶子节点都还是折叠的,可以点击打开的。&br&&/p&&br&&p&&b&Keyboard Maestro&/b&&/p&&p&绝逼是大神器,¥232,有它我仿佛拥有整个世界。&/p&&ul&&li&推荐指数:★★★★★&/li&&li&效率提高:整体工作效率成倍提高,特别是繁琐重复的工作&br&&/li&&li&相关地址:&a href=&///?target=http%3A///main/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/mai&/span&&span class=&invisible&&n/&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&&p&它的功能跟 Alfred 2 的 workflow 是类似的,能完成各种自动化工作,但比 Alfred 2 强多了,支持各种脚本(AppleScript/Shell/JavaScript...)嵌入,支持自定义流程(if, while...),支持自动点击,按键,支持文件操作,支持剪贴板操作等等等。&/p&&p&其实有了它,后边的一些工具都可以被取代,比如 aText。&/p&&p&我用它的自动化点击和按键,去12306抢票,实现自动翻墙代理等…更多介绍看这里&a href=&///?target=http%3A///note//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Keyboard Maestro:键盘大师&i class=&icon-external&&&/i&&/a&&/p&&p&它虽然看起来很贵,但它用起来很便宜…&br&&/p&&b&&br&aText&br&&/b&自动文本生成的工具,¥50,有其它一样功能,免费的。&br&&ul&&li&推荐指数:★★★★★&/li&&li&效率提高:写代码变得特别溜,写邮件、常用的输入等变得特别快&br&&/li&&li&相关地址:&a class=& external& href=&///?target=https%3A///atext/& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/atext/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&/ul&有人问为什么平时我写代码那么快,因为我用它自定义了很多很多代码段。&br&可以看看官方介绍的图片,这家伙的功能实在太好用了,使得我刚用就毫不犹豫买了。&br&&img data-rawheight=&686& data-rawwidth=&800& src=&/532b89dd0ac8a2c411f3cc882bf71942_b.jpg& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/532b89dd0ac8a2c411f3cc882bf71942_r.jpg&&&img data-rawheight=&174& data-rawwidth=&401& src=&/c4b65c3fbcca7c20acf9_b.jpg& class=&content_image& width=&401&&如上图,自定义了 Junit 的测试方法结构,留下方法名填空,生成以后光标挪到花括号内。&br&&br&&b&Bartender&/b&&br&能将菜单栏(Menu Bar)的图标都收起来的小插件,记得是团购¥50,淘宝上有正版团购。&br&&ul&&li&推荐指数:★★★★&/li&&li&效率提高:干净了菜单栏,更容易关注到需要注意的消息&br&&/li&&li&相关链接:&a class=& wrap external& href=&///?target=http%3A///& target=&_blank& rel=&nofollow noreferrer&&Bartender | Mac Menu Bar Item Control&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&直接上图就知道了吧。&br&没用之前是这样子的。&br&&img data-rawheight=&85& data-rawwidth=&964& src=&/592ac3fadbbdee446d56bc_b.jpg& class=&origin_image zh-lightbox-thumb& width=&964& data-original=&/592ac3fadbbdee446d56bc_r.jpg&&打开之后是这样子的。&br&&img data-rawheight=&62& data-rawwidth=&809& src=&/def82bbdcdb4f7a6d0b8fda519b55cf4_b.jpg& class=&origin_image zh-lightbox-thumb& width=&809& data-original=&/def82bbdcdb4f7a6d0b8fda519b55cf4_r.jpg&&你可以决定什么图标是隐藏的,什么图标可以展示在二级里,还支持如果图标有更新,暂时显示在一级原始菜单栏中,比方说有 QQ 消息,它会在原来的菜单栏中显示一段时间。&br&&br&&b&SSH Proxy&/b&&br&很方便建立起 SSH Tunnel,¥18。&br&&ul&&li&推荐指数:★★★&/li&&li&相关链接:&a href=&///?target=https%3A///cn/app/ssh-proxy/idFmt%3D12& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mac App Store-SSH Proxy&i class=&icon-external&&&/i&&/a&&br&&/li&&/ul&&img data-rawheight=&290& data-rawwidth=&328& src=&/71e4d406a12ae898d1ea2_b.jpg& class=&content_image& width=&328&&如果你也用 SSH Tunnel 做一些科学上网的事情,这个工具挺适合你的&b&。&br&&/b&自从我买了 VPS 以后,每次需要使用谷歌脸谱都需要先本地起个脚本建立 SSH 隧道,但比较麻烦,得打开命令行,输入命令,按回车,等待连接响应,有时候还得不断重试,蛋疼的是你合上盖子再打开又得来一次。&br&这个应用它自动帮你做了自动连接和重连的事情,总归来说还是很方便的。&br&&b&&br&Gas Mask&br&&/b&可以很方便切换 hosts 文件的工具,十分好用。&br&&ul&&li&推荐指数:★★★&/li&&li&效率提高:不需要打开终端打开 hosts 了,点2下就好了,3s 内完成之前至少需要40s 完成的事情,而且还不会出错&br&&/li&&li&相关地址:&a href=&///?target=https%3A///2ndalpha/gasmask& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2ndalpha/gasmask · GitHub&i class=&icon-external&&&/i&&/a&&/li&&/ul&&img data-rawheight=&188& data-rawwidth=&222& src=&/99020dcc63c4b_b.jpg& class=&content_image& width=&222&&&br&&b&Alfred 2&/b&&p&多人介绍,我就不赘述了。&/p&&ul&&li&推荐指数:★★★★☆&/li&&li&效率提高:提高了80%&br&&/li&&li&相关地址:&ol&&li&&a class=& wrap external& href=&///?target=http%3A//& target=&_blank& rel=&nofollow noreferrer&&Alfred App - Productivity App for Mac OS X&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=&internal& href=&/topic/&&知乎关于 Alfred 的问题&/a&&/li&&/ol&&/li&&/ul&&p&我用它完成自定义搜索引擎&br&&img data-rawheight=&163& data-rawwidth=&680& src=&/538cc095a301_b.jpg& class=&origin_image zh-lightbox-thumb& width=&680& data-original=&/538cc095a301_r.jpg&&方法也挺简单的,如图:&br&&img data-rawheight=&434& data-rawwidth=&850& src=&/7cb8bcaaeac271ec3fda75a160ab305a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&850& data-original=&/7cb8bcaaeac271ec3fda75a160ab305a_r.jpg&&&/p&&br&&b&Karabiner + Seil
&/b&&p&键盘按键重新自定义工具,免费&/p&&ul&&li&推荐指数:★★★★★&/li&&li&效率提高:打字编辑速度比之前要快上40%&br&&/li&&li&相关地址:&ol&&li&&a class=& wrap external& href=&///?target=https%3A//pqrs.org/osx/karabiner/& target=&_blank& rel=&nofollow noreferrer&&Karabiner&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//pqrs.org/osx/karabiner/seil.html.en& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Seil&i class=&icon-external&&&/i&&/a&&/li&&/ol&&/li&&/ul&&p&有这个工具,键盘的所有按键都可以重新定义功能,比方说没有用的eject(12前Pro款都拥有的退出光盘按键)键可以改成「往前删除」。&/p&&p&我用这个工具完成以下改造,习惯以后工作效率提升40%以上:&/p&&ol&&li&caps lock 被我换成了 backspace ,删除打错的字,右手不用离开键盘,左手小指动一动就好了,键程明显缩小,效率大大提升;&/li&&li&习惯 vi 的人还有个特别蛋疼的地方,就是退出编辑模式需要按esc,我把右边的 shift 改成了 esc,键程也明显缩小;&/li&&li&fn+j/k/h/l 全局仿 vim 模式,分别是上下左右,无论在哪里都可以用,即使我刚刚在回答知乎的这个问题也在用,不用右手挪到右下角去按方向键,方便很多;&/li&&li&另外一些 vim 模式的按键映射。&/li&&/ol&&br&&b&ScreenFloat
&/b&&p&浮动截图,¥45&/p&&ul&&li&推荐指数:★★★☆&/li&&li&相关地址:&a href=&///?target=https%3A///cn/app/screenfloat/idFmt%3D12& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ScreenFloat&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&有时候文件对比、图片找茬或是取色,特别希望能截图然后立刻打开,这款应用就能满足。&br&截图以后,被截图的区域立刻变成一个漂浮的图片随你拖动。&/p&&img data-rawheight=&462& data-rawwidth=&779& src=&/2e78e72da36de793ff2544aae59c2fc1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&779& data-original=&/2e78e72da36de793ff2544aae59c2fc1_r.jpg&&&br&&b&CopyLess/Paste
&/b&&p&剪贴板历史工具,¥30~40&/p&&ul&&li&推荐指数:★★★☆&/li&&li&相关地址:&ol&&li&&a class=& wrap external& href=&///?target=https%3A///cn/app/copyless/idFmt%3D12& target=&_blank& rel=&nofollow noreferrer&&CopyLess&i class=&icon-external&&&/i&&/a&&/li&&li&&a class=& wrap external& href=&///?target=https%3A///cn/app/paste-clipboard-history-manager/idFmt%3D12& target=&_blank& rel=&nofollow noreferrer&&Paste – Clipboard history manager&i class=&icon-external&&&/i&&/a&&/li&&/ol&&/li&&/ul&&p&剪贴板历史记录,适用于频繁复制粘贴。有了它可以生活的更好:&/p&&ol&&li&复制多个项目,然后再一个一个粘贴,不用在应用间来回切换复制粘贴;&/li&&li&可以搜索历史剪贴板都复制过什么,代码什么的不用担心会丢失。&/li&&/ol&&img data-rawheight=&899& data-rawwidth=&1439& src=&/edf80c94fd763bc5d98475_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1439& data-original=&/edf80c94fd763bc5d98475_r.jpg&&&br&&b&Pushbullet
&/b&&p&消息推送同步工具,免费&/p&&ul&&li&推荐指数:★★★★&/li&&li&效率提高:60%&br&&/li&&li&相关地址:&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pushbullet - Your devices working better together&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&你是否希望可以将手机、平板上的任意文字、网页链接、图片、文件等快速传送到电脑上?或者反过来从电脑传到移动设备去?很多人会选择使用 QQ、Dropbox 等工具,又或者给自己发邮件,但它们都比较慢也麻烦。&/p&&p&Pushbullet (子弹推送) 是一个强大免费的&b&跨平台消息推送&/b&工具,支持 Android、iOS、Windows、Mac 等系统。它最大特色是能支持消息双向/多向推送!你可以在不同设备间来回互相推送文字、图片、网址等消息,而且还&b&支持跨设备复制粘贴 (剪贴板云同步)&/b&,在转换设备使用时特别方便!在同类软件中表现出色,绝对是工作、生活上的效率神器…&/p&&img data-rawheight=&480& data-rawwidth=&503& src=&/fa15fef78b81b9105ecc6d2e929f56a9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&503& data-original=&/fa15fef78b81b9105ecc6d2e929f56a9_r.jpg&&&img data-rawheight=&1136& data-rawwidth=&640& src=&/17a9292cff5df7380324_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/17a9292cff5df7380324_r.jpg&&&img data-rawheight=&1136& data-rawwidth=&640& src=&/db4b9ceb_b.jpg& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/db4b9ceb_r.jpg&&
使用 Mac 已多年,沉淀了好一些好用的工具,有些比较偏极客,很多工具就是为了提高效率,键盘流,脚本流,自动化流。列举的应用虽然有些收费而且并不便宜。但是生产力工具贵不贵,真不能单纯看价钱,如果 ¥500的东西给你节省了20%的时间,这交易难道不划算…
没有。&br&一直很想写一本,比如《Python沉思录》之类的,毕竟Python没有那么多技巧旮旯,没有多少“gems”可以写出来。&br&&a data-title=&@黄哥& data-editable=&true& class=&member_mention& href=&///people/936b7b6ef407b9f1f23dbbfa5b2853ae& data-hash=&936b7b6ef407b9f1f23dbbfa5b2853ae& data-tip=&p$b$936b7b6ef407b9f1f23dbbfa5b2853ae&&@黄哥&/a& 推荐的《Python高级编程》不错,我也在 blog 推荐过。&a href=&///?target=http%3A//blog.csdn.net/gzlaiyonghao/article/details/6204639& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&三本可以一买的 Python 书&i class=&icon-external&&&/i&&/a&&br&另外,拙著 &a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编写高质量代码:改善Python程序的91个建议 (豆瓣)&i class=&icon-external&&&/i&&/a& 我觉得也有一些值得一读的地方。&br&还有一本来自日本的 &a class=& wrap external& href=&///?target=http%3A///%25E5%259B%25BE%25E7%%25E7%25A8%258B%25E5%25BA%258F%25E8%25AE%25BE%25E8%25AE%25A1%25E4%25B8%259B%25E4%25B9%25A6-Python%25E5%25BC%%258F%%25AE%259E%25E6%-%25E6%%25E6%259C%25ACBePROUD%25E8%%25E4%25BB%25BD%25E6%259C%%E5%2585%25AC%25E5%258F%25B8/dp/B00KGQ4NRO/ref%3Dsr_1_cc_1%3Fs%3Daps%26ie%3DUTF8%26qid%3D%26sr%3D1-1-catcorr%26keywords%3Dpython%2B%25E6%%25E6%259C%25AC& target=&_blank& rel=&nofollow noreferrer&&《图灵程序设计丛书:Python开发实战》 日本BePROUD股份有限公司, 盛荣【摘要 书评 试读】图书&i class=&icon-external&&&/i&&/a& 还可以,再推荐一本 &a class=& wrap external& href=&///?target=http%3A///dp/B00MHDPIJ6/ref%3Dsr_1_cc_1%3Fs%3Daps%26ie%3DUTF8%26qid%3D%26sr%3D1-1-catcorr%26keywords%3Dpython%2B%25E8%25AE%25BE%25E8%25AE%25A1%25E6%25A8%25A1%25E5%25BC%258F& target=&_blank& rel=&nofollow noreferrer&&《Python编程实战:运用设计模式、并发和程序库创建高质量程序》 萨默费尔德 (Mark Summerfield), 爱飞翔【摘要 书评 试读】图书&i class=&icon-external&&&/i&&/a& 也是不错的。
没有。一直很想写一本,比如《Python沉思录》之类的,毕竟Python没有那么多技巧旮旯,没有多少“gems”可以写出来。 推荐的《Python高级编程》不错,我也在 blog 推荐过。另外,拙著
推荐个我自己写的的开源论坛项目:&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Carbon Forum&i class=&icon-external&&&/i&&/a&(服务器在美国,国内访问可能不太快)&br&GitHub地址:&a href=&///?target=https%3A///lincanbin/Carbon-Forum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lincanbin/Carbon-Forum · GitHub&i class=&icon-external&&&/i&&/a&&br&&img src=&/d169e6d69efabe19425b20_b.jpg& data-rawheight=&68& data-rawwidth=&409& class=&content_image& width=&409&&当然是非常轻量的,在5美元/月的VPS上跑,页面执行时间也普遍在1~5ms。比同类论坛快5到10倍。在我以前用的另1个4美元/月的Xeon E3 VPS上跑,即使关闭memcached,页面执行时间也只有现在的一半。&br&&img src=&/3922ebc5b9ad44b709f0f6b9f35a27f1_b.jpg& data-rawheight=&217& data-rawwidth=&356& class=&content_image& width=&356&&论坛是类似知乎的这种Tag分类的形式,不设置板块,这点与其他论坛不太相同。&br&&img src=&/c40cbad06c23c2de28ff6b_b.jpg& data-rawheight=&366& data-rawwidth=&981& class=&origin_image zh-lightbox-thumb& width=&981& data-original=&/c40cbad06c23c2de28ff6b_r.jpg&&同时,关注话题、关注用户的、时间线的功能也都是有的。&br&&img src=&/fa2deecaefaa_b.jpg& data-rawheight=&447& data-rawwidth=&484& class=&origin_image zh-lightbox-thumb& width=&484& data-original=&/fa2deecaefaa_r.jpg&&新用户会用我的&a href=&///?target=https%3A///lincanbin/Material-Design-Avatars& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lincanbin/Material-Design-Avatars · GitHub&i class=&icon-external&&&/i&&/a&自动生成个性化的头像。虽然头像并不一定unique,我觉得比Gravatar什么的要好看不少,特地拿出来当一个feature说一说。&br&&br&密码采用MD5+Salt在数据库保存,比起其他用MD5直接保存的,被彩虹表爆破的可能性几乎为零。&br&并且登陆过程,即使没有SSL,也不会像知乎这样明文发送密码,而且Cookies Hash中带有强制过期的时间戳。SQL注入的话肯定是没了的,不会像其他论坛一样采用mysql系列函数这种PHP中的已废弃特性,而是用PDO。XSS就我的能力来看是不存在的,如果我请告诉我。比起回答里的其他项目安全性要高不少。&br&&img src=&/5be30bc7e569c0d69b568433cdabb344_b.png& data-rawwidth=&1037& data-rawheight=&386& class=&origin_image zh-lightbox-thumb& width=&1037& data-original=&/5be30bc7e569c0d69b568433cdabb344_r.png&&实时消息推送,用Long Poll实现,资源消耗非常低,同时即使网页被最小化,用户依旧能收到右上角的推送通知(IE除外,IE全家包括最新版都不支持这个后台推送)&br&&img src=&/bef74f2aea5d_b.png& data-rawwidth=&987& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&987& data-original=&/bef74f2aea5d_r.png&&全站异步加载,高速,连外部JS也是以异步方式载入,前端后端都做到了极高性能。&br&&br&&br&同时,也有专门为手机打造的移动版(&a href=&///?target=http%3A//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Carbon Forum&i class=&icon-external&&&/i&&/a&,手机用户打开&a href=&///?target=http%3A//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Carbon Forum&i class=&icon-external&&&/i&&/a&可以自动跳转到 )&br&手机版基本是全异步加载的,但是并不会影响收录,并且网站配有完善的自动生成的Sitemap,也做了Sitemap的移动适配。SiteMap的移动适配完美支持Google和百度。&br&&img src=&/54c891bf98efb49ea417a3_b.jpg& data-rawheight=&800& data-rawwidth=&480& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/54c891bf98efb49ea417a3_r.jpg&&&br&&img src=&/ff031e349d0ae030eaee44d79d418bfe_b.jpg& data-rawheight=&800& data-rawwidth=&480& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/ff031e349d0ae030eaee44d79d418bfe_r.jpg&&&img src=&/e4830fcc5ca6d1b179cf_b.jpg& data-rawheight=&800& data-rawwidth=&480& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/e4830fcc5ca6d1b179cf_r.jpg&&&img src=&/a632d36321eabab6c8bf3f9308badb25_b.jpg& data-rawheight=&800& data-rawwidth=&480& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/a632d36321eabab6c8bf3f9308badb25_r.jpg&&&img src=&/620b1b1a50aa401b4cd5ac_b.jpg& data-rawheight=&800& data-rawwidth=&480& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/620b1b1a50aa401b4cd5ac_r.jpg&&&img src=&/237bf110cbddfb4ef281bf_b.jpg& data-rawheight=&1697& data-rawwidth=&997& class=&origin_image zh-lightbox-thumb& width=&997& data-original=&/237bf110cbddfb4ef281bf_r.jpg&&&img src=&/65a519b672a10b42d9bbaa8_b.jpg& data-rawheight=&1426& data-rawwidth=&997& class=&origin_image zh-lightbox-thumb& width=&997& data-original=&/65a519b672a10b42d9bbaa8_r.jpg&&比知乎更完善的草稿保存机制——离线的,不消耗服务器资源,并且高可靠性!确保每个回帖都不会丢。Ueditor本来也带有草稿箱,但是是根据URL来的,冗余较多,这个草稿箱是我重写的。&br&&img src=&/3e5744dbe1a1affddd788cf704ea0cc0_b.jpg& data-rawheight=&1010& data-rawwidth=&997& class=&origin_image zh-lightbox-thumb& width=&997& data-original=&/3e5744dbe1a1affddd788cf704ea0cc0_r.jpg&&根据输入的帖子内容,进行自动的话题推荐,类似知乎,是我利用维基百科公开的数据实现的,我把词条都提取出来了,大概14M,此功能可选,不选的话论坛就只有2M。(所有可选功能都不选的情况下)&br&&img src=&/6eda3fe9ddadf_b.jpg& data-rawheight=&1010& data-rawwidth=&997& class=&origin_image zh-lightbox-thumb& width=&997& data-original=&/6eda3fe9ddadf_r.jpg&&简洁的设置&br&&img src=&/ebdc7e4348_b.jpg& data-rawheight=&595& data-rawwidth=&974& class=&origin_image zh-lightbox-thumb& width=&974& data-original=&/ebdc7e4348_r.jpg&&完善的通知系统&br&&img src=&/ba002d946b6a1b6a908a_b.jpg& data-rawwidth=&480& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&/ba002d946b6a1b6a908a_r.jpg&&&br&&a href=&///?target=https%3A///lincanbin/Android-Carbon-Forum& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lincanbin/Android-Carbon-Forum · GitHub&i class=&icon-external&&&/i&&/a&&br&一个正在开发中的Android客户端,不过完成度很低现在还不能用。完成后每个使用Carbon Forum的网站,都可以自己编译出一个自己的Android客户端。
推荐个我自己写的的开源论坛项目:(服务器在美国,国内访问可能不太快)GitHub地址:当然是非常轻量的,在5美元/月的VPS上跑,页面执行时间也普遍在1~5ms。比同类论坛快5到10倍。在我以前用的另1个4美元/月的…
&a href=&///?target=http%3A//www.the5fire.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&the5fire的技术博客&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SAEPy blog&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///twelfthing/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&twelfthing - 博客园&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&不沉之月-vls的博客&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&小明明s à domicile&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//www.keakon.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&keakon的涂鸦馆&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//xiaocong.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&葱丝瓣酱&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//feilong.me/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&飞龙非龙&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//zheng-/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&zheng-/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&希望对你有帮助
希望对你有帮助
&a href=&///?target=https%3A//www.opencas.org/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&opencas.org/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///android/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Index of /android/&i class=&icon-external&&&/i&&/a&&br&中科院镜像站&br&&br&使用方法&br&&a href=&///?target=https%3A//forum.opencas.org/t/184& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&forum.opencas.org/t/184&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
中科院镜像站使用方法
已有帐号?
无法登录?
社交帐号登录
5635 人关注
599 个回答
459 人关注
1452 人关注
780 人关注
1599 个回答
1946 人关注

我要回帖

更多关于 宝源锦号 的文章

 

随机推荐