华为tag tl00手机手机tag28怎样书写

&figure&&img src=&https://pic7.zhimg.com/v2-ec65a8b2bef015b6acff938d_b.jpg& data-rawwidth=&852& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&852& data-original=&https://pic7.zhimg.com/v2-ec65a8b2bef015b6acff938d_r.jpg&&&/figure&&p&众所周知 nginx 以性能而出名,这和它优秀的代码实现有着密切的关系,而本文所要讲述的——位运算,也是促成 nginx 优秀性能的原因之一。&/p&&p&位运算在 nginx 的源码是处处可见,从定义指令的类型(可以携带多少参数,可以出现在哪些配置块下),到标记当前请求是否还有未发送完的数据,再到 nginx 事件模块里用指针的最低位来标记一个事件是否过期,无不体现着位运算的神奇和魅力。&/p&&p&本文会介绍和分析 nginx 源码里的一些经典的位运算使用,并扩展介绍一些位其他的位运算技巧。&/p&&hr&&h2&&b&对齐&/b&&/h2&&p&nginx 内部在进行内存分配时,非常注意内存起始地址的对齐,即内存对齐(可以换来一些性能上的提升),这与处理器的寻址特性有关,比如某些处理器会按 4 字节宽度寻址,在这样的机器上,假设需要读取从 &code&0x46b1e7&/code& 开始的 4 个字节,由于 &code&0x46b1e7&/code& 并不处在 4 字节边界上(&code&0x46b1e7 % 4 = 3&/code&),所以在进行读的时候,会分两次进行读取,第一次读取 &code&0x46b1e4&/code& 开始的 4 个字节,并取出低 3 字节;再读取 &code&0x46b1e8&/code& 开始的 4 个字节,取出最高的字节。我们知道读写主存的速度并不能匹配 CPU,那么两次的读取显然带来了更大的开销,这会引起指令停滞,增大 CPI(每指令周期数),损害应用程序的性能。&/p&&p&因此 nginx 封装了一个宏,专门用以进行对齐操作。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&cp&&#define ngx_align(d, a)
(((d) + (a - 1)) & ~(a - 1))&/span&
&/code&&/pre&&/div&&p&如上代码所示,该宏使得 &code&d&/code& 按 &code&a&/code& 对齐,其中 &code&a&/code& 必须是 2 的幂次。&/p&&p&比如 &code&d&/code& 是 17,&code&a&/code& 是 2 时,得到 18;&code&d&/code& 是 15,&code&a&/code& 是 4 时,得到 16;&code&d&/code& 是 16,&code&a&/code& 是 4 时,得到 16。&/p&&p&这个宏其实就是在寻找大于等于 &code&d&/code& 的,第一个 &code&a&/code& 的倍数。由于 &code&a&/code& 是 2 的幂次, 因此 &code&a&/code& 的二进制表示为 &code&00...1...00&/code& 这样的形式,即它只有一个 1,所以 &code&a - 1&/code& 便是 &code&00...01...1&/code& 这样的格式,那么 &code&~(a - 1)&/code& 就会把低 &code&n&/code& 位全部置为 0,其中 &code&n&/code& 是 &code&a&/code& 低位连续 0 的个数。所以此时如果我们让 &code&d&/code& 和 &code&~(a - 1)&/code& 进行一次按位与操作,就能够把 &code&d&/code& 的低 &code&n&/code& 位清零,由于我们需要寻找大于等于 &code&d&/code& 的数,所以用 &code&d + (a - 1)&/code& 即可。&/p&&h2&&b&位图&/b&&/h2&&p&位图,通常用以标记事物的状态,“位” 体现在每个事物只使用一个比特位进行标记,这即节约内存,又能提升性能。&/p&&p&nginx 里有多处使用位图的例子,比如它的共享内存分配器(&code&slab&/code&),再比如在对 &code&uri&/code&(&code&Uniform Resource Identifier&/code&)进行转义时需要判断一个字符是否是一个保留字符(或者不安全字符),这样的字符需要被转义成 &code&%XX&/code& 。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&
&span class=&k&&static&/span& &span class=&kt&&uint32_t&/span&
&span class=&n&&uri_component&/span&&span class=&p&&[]&/span& &span class=&o&&=&/span& &span class=&p&&{&/span&
&span class=&mh&&0xffffffff&/span&&span class=&p&&,&/span& &span class=&cm&&/* 11
11 */&/span&
&span class=&cm&&/* ?&=& ;:98
/.-, +*)( '&%$ #&!
&span class=&mh&&0xfc009fff&/span&&span class=&p&&,&/span& &span class=&cm&&/* 00
11 */&/span&
&span class=&cm&&/* _^]\ [ZYX WVUT SRQP
ONML KJIH GFED CBA@ */&/span&
&span class=&mh&&0x&/span&&span class=&p&&,&/span& &span class=&cm&&/* 00
01 */&/span&
&span class=&cm&&/*
~}| {zyx wvut srqp
onml kjih gfed cba` */&/span&
&span class=&mh&&0xb8000001&/span&&span class=&p&&,&/span& &span class=&cm&&/* 00
01 */&/span&
&span class=&mh&&0xffffffff&/span&&span class=&p&&,&/span& &span class=&cm&&/* 11
11 */&/span&
&span class=&mh&&0xffffffff&/span&&span class=&p&&,&/span& &span class=&cm&&/* 11
11 */&/span&
&span class=&mh&&0xffffffff&/span&&span class=&p&&,&/span& &span class=&cm&&/* 11
11 */&/span&
&span class=&mh&&0xffffffff&/span&
&span class=&cm&&/* 11
11 */&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&如上所示,一个简单的数组组成了一个位图,共包含 8 个数字,每个数字表示 32 个状态,因此这个位图把 256 个字符(包括了扩展 ASCII 码)。为 0 的位表示一个通常的字符,即不需要转义,为 1 的位代表的就需要进行转义。&/p&&p&那么这个位图该如何使用?nginx 在遍历 &code&uri&/code& 的时候,通过一条简单的语句来进行判断。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&n&&uri_component&/span&&span class=&p&&[&/span&&span class=&n&&ch&/span& &span class=&o&&&&&/span& &span class=&mi&&5&/span&&span class=&p&&]&/span& &span class=&o&&&&/span& &span class=&p&&(&/span&&span class=&mi&&1U&/span& &span class=&o&&&&&/span& &span class=&p&&(&/span&&span class=&n&&ch&/span& &span class=&o&&&&/span& &span class=&mh&&0x1f&/span&&span class=&p&&))&/span&
&/code&&/pre&&/div&&p&如上所示,&code&ch&/code& 表示当前字符,&code&ch && 5&/code& 是对 ch 右移 5 位,这起到一个除以 32 的效果,这一步操作确定了 &code&ch&/code& 在 &code&uri_component&/code& 的第几个数字上;而右边的,&code&(ch & 0x1f)&/code& 则是取出了 &code&ch&/code& 低 5 位的值,相当于取模 32,这个值即表示 &code&ch&/code& 在对应数字的第几个位(从低到高计算);因此左右两边的值进行一次按位与操作后,就把 &code&ch&/code& 字符所在的位图状态取出来了。比如 &code&ch&/code& 是 &code&'0'&/code&(即数字 48),它存在于位图的第 2 个数字上(&code&48 && 5 = 1&/code&),又在这个数字(&code&0xfc009fff&/code&)的第 16 位上,所以它的状态就是 &code&0xfc009fff & 0x10000 = 0&/code&,所以 &code&'0'&/code& 是一个通用的字符,不用对它转义。 &/p&&p&从上面这个例子中我们还可以看到另外一个位运算的技巧,就是在对一个 2 的幂次的数进行取模或者除操作的时候,也可以通过位运算来实现,这比直接的除法和取模运算有着更好的性能,虽然在合适的优化级别下,编译器也可能替我们完成这样的优化。&/p&&h2&&b&寻找最低位 1 的位置&/b&&/h2&&p&接着我们来介绍下一些其他的应用技巧。&/p&&p&找到一个数字二进制里最低位的 1 的位置,直觉上你也许会想到按位遍历,这种算法的时间复杂是 &code&O(n)&/code&,性能上不尽如人意。&/p&&p&如果你曾今接触过&a href=&http://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Fenwick_tree& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&树状数组&/a&,你可能就会对此有不同的看法,树状数组的一个核心概念是 计算 &code&lowbit&/code&,即计算一个数字二进制里最低位 1 的幂次。它之所以有着不错的时间复杂度(&code&O(logN)&/code&),便是因为能够在 &code&O(1)&/code& 或者说常数的时间内得到答案。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&kt&&int&/span& &span class=&nf&&lowbit&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&n&&x&/span& &span class=&o&&&&/span& &span class=&o&&~&/span&&span class=&p&&(&/span&&span class=&n&&x&/span& &span class=&o&&-&/span& &span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这个技巧事实上和上述对齐的方式类似,比如 &code&x&/code& 是 &code&00...111000&/code& 这样的数字,则 &code&x - 1&/code& 就成了 &code&00...110111&/code&,对之取反,则把原本 &code&x&/code& 低位连续的 0 所在的位又重新置为了 0(而原本最低位 1 的位置还是为 1),我们会发现除了最低位 1 的那个位置,其他位置上的值和 &code&x&/code& 都是相反的,因此两者进行按位与操作后,结果里只可能有一个 1,便是原本 &code&x&/code& 最低位的 1。&/p&&h2&&b&寻找最高位 1 的位置&/b&&/h2&&p&换一个问题,这次不是寻找最低位,而是寻找最高位的 1。&/p&&p&这个问题有着它实际的意义,比如在设计一个 &code&best-fit&/code& 的内存池的时候,我们需要找到一个比用户期望的 &code&size&/code& 大的第一个 2 的幂次。&/p&&p&同样地,你可能还是会先想到遍历。&/p&&p&事实上 Intel CPU 指令集有这么一条指令,就是用以计算一个数二进制里最高位 1 的位置。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&kt&&size_t&/span& &span class=&nf&&bsf&/span&&span class=&p&&(&/span&&span class=&kt&&size_t&/span& &span class=&n&&input&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&size_t&/span& &span class=&n&&pos&/span&&span class=&p&&;&/span&
&span class=&n&&__asm__&/span&&span class=&p&&(&/span&&span class=&s&&&bsfq %1, %0&&/span& &span class=&o&&:&/span& &span class=&s&&&=r&&/span& &span class=&p&&(&/span&&span class=&n&&pos&/span&&span class=&p&&)&/span& &span class=&o&&:&/span& &span class=&s&&&rm&&/span& &span class=&p&&(&/span&&span class=&n&&input&/span&&span class=&p&&));&/span&
&span class=&k&&return&/span& &span class=&n&&pos&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这很好,但是这里我们还是期望用位运算找到这个 1 的位置。&/p&&div class=&highlight&&&pre&&code class=&language-cpp&&&span&&/span&&span class=&kt&&size_t&/span& &span class=&nf&&bsf&/span&&span class=&p&&(&/span&&span class=&kt&&size_t&/span& &span class=&n&&input&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&2&/span&&span class=&p&&;&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&4&/span&&span class=&p&&;&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&8&/span&&span class=&p&&;&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&16&/span&&span class=&p&&;&/span&
&span class=&n&&input&/span& &span class=&o&&|=&/span& &span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&32&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&input&/span& &span class=&o&&-&/span& &span class=&p&&(&/span&&span class=&n&&input&/span& &span class=&o&&&&&/span& &span class=&mi&&1&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这便是我们所期望的计算方式了。我们来分析下这个计算的原理。&/p&&p&需要说明的是,如果你需要计算的值是 32 位的,则上面函数的最后一步
&code&input |= input && 32&/code& 是不需要的,具体执行多少次 &code&input |= input && m&/code&, 是由 &code&input&/code& 的位长决定的,比如 8 位则进行 3 次,16 位进行 4 次,而 32 位进行 5 次。 &/p&&p&为了更简洁地进行描述,我们用 8 位的数字进行分析,设一个数 &code&A&/code&,它的二进制如下所示。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0]
&/code&&/pre&&/div&&p&上面的计算过程如下。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&A[7] A[6] A[5] A[4] A[3] A[2] A[1] A[0]
A[7] A[6] A[5] A[4] A[3] A[2] A[1]
---------------------------------------
A[7] A[7]|A[6] A[6]|A[5] A[5]|A[4] A[4]|A[3] A[3]|A[2] A[2]|A[1] A[1]|A[0]
A[7]|A[6] A[6]|A[5] A[5]|A[4] A[4]|A[3] A[3]|A[2]
--------------------------------------------------------------------------
A[7] A[7]|A[6] A[7]|A[6]|A[5] A[7]|A[6]|A[5]|A[4] A[6]|A[5]|A[4]|A[3] A[5]|A[4]|A[3]|A[2] A[4]|A[3]|A[2]|A[1] A[3]|A[2]|A[1]|A[0]
A[7]|A[6]|A[5]
A[7]|A[6]|A[5]|A[4]
---------------------------------------------------------------------------------------------------------------------------------
A[7] A[7]|A[6] A[7]|A[6]|A[5]
A[7]|A[6]|A[5]|A[4] A[7]|A[6]|A[5]|A[4]|A[3] A[7]|A[6]|A[5]|A[4]|A[3]|A[2] A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1] A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|A[0]
&/code&&/pre&&/div&&p&我们可以看到,最终 &code&A&/code& 的最高位是 &code&A[7]&/code&,次高位是 &code&A[7]|A[6]&/code&,第三位是 &code&A[7]|A[6]|A[5]&/code&,最低位是 &code&A[7]|A[6]|A[5]|A[4]|A[3]|A[2]|A[1]|A[0]&/code& ,假设最高位的 1 是在第 &code&m&/code& 位(从右向左算,最低位称为第 &code&0&/code& 位),那么此时的低 &code&m&/code& 位都是 1,其他的高位都是 0。也就是说,&code&A&/code& 将会是 2 的某幂再减一,于是最后一步(&code&input - (input && 1)&/code&)的用意也就非常明显了,即将除最高位以外的 1 全部置为 0,最后返回的便是原来的 &code&input&/code& 里最高位 1 的对应幂了。&/p&&h2&&b&计算 1 的个数&/b&&/h2&&p&如何计算一个数字二进制表示里有多少个 1 呢?&/p&&p&直觉上可能还是会想到遍历(遍历真是个好东西),让我们计算下复杂度,一个字节就是 &code&O(8)&/code&,4 个字节就是 &code&O(32)&/code&,而 8 字节就是 &code&O(64)&/code&了。&/p&&p&如果这个计算会频繁地出现在你的程序里,当你在用 &code&perf&/code&
这样的性能分析工具观察你的应用程序时,它或许就会得到你的关注,而你不得不去想办法进行优化。&/p&&p&事实上《深入理解计算机系统》这本书里就有一个这个问题,它要求计算一个无符号长整型数字二进制里 1 的个数,而且希望你使用最优的算法,最终这个算法的复杂度是 &code&O(8)&/code&。&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&kt&&long&/span& &span class=&nf&&fun_c&/span&&span class=&p&&(&/span&&span class=&kt&&unsigned&/span& &span class=&kt&&long&/span& &span class=&n&&x&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&long&/span& &span class=&n&&val&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&i&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span& &span class=&p&&(&/span&&span class=&n&&i&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span& &span class=&n&&i&/span& &span class=&o&&&&/span& &span class=&mi&&8&/span&&span class=&p&&;&/span& &span class=&n&&i&/span&&span class=&o&&++&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&val&/span& &span class=&o&&+=&/span& &span class=&n&&x&/span& &span class=&o&&&&/span& &span class=&mh&&0x0101L&/span&&span class=&p&&;&/span&
&span class=&n&&x&/span& &span class=&o&&&&=&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&val&/span& &span class=&o&&+=&/span& &span class=&n&&val&/span& &span class=&o&&&&&/span& &span class=&mi&&32&/span&&span class=&p&&;&/span&
&span class=&n&&val&/span& &span class=&o&&+=&/span& &span class=&n&&val&/span& &span class=&o&&&&&/span& &span class=&mi&&16&/span&&span class=&p&&;&/span&
&span class=&n&&val&/span& &span class=&o&&+=&/span& &span class=&n&&val&/span& &span class=&o&&&&&/span& &span class=&mi&&8&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&val&/span& &span class=&o&&&&/span& &span class=&mh&&0xFF&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&这个算法在我的另外一篇&a href=&http://link.zhihu.com/?target=https%3A//tokers.github.io//csapp_3_49/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&文章&/a&里曾有过分析。&/p&&p&观察 &code&0x0101&/code& 这个数,每 8 位只有最后一位是 1。那么 x 与之做按位与,会得到下面的结果:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&设 A[i] 表示 x 二进制表示里第 i 位的值(0 或 1)。
A[0] + (A[8] && 8) + (A[16] && 16) + (A[24] && 24) + (A[32] && 32) + (A[40] && 40) + (A[48] && 48) + (A[56] && 56)
A[1] + (A[9] && 8) + (A[17] && 16) + (A[25] && 24) + (A[33] && 32) + (A[41] && 40) + (A[49] && 48) + (A[57] && 56)
A[7] + (A[15] && 8) + (A[23] && 16) + (A[31] && 24) + (A[39] && 32) + (A[47] && 40) + (A[55] && 48) + (A[63] && 56)
相加后得到的值为:
(A[63] + A[62] + A[61] + A[60] + A[59] + A[58] + A[57] + A[56]) && 56 +
(A[55] + A[54] + A[53] + A[52] + A[51] + A[50] + A[49] + A[48]) && 48 +
(A[47] + A[46] + A[45] + A[44] + A[43] + A[42] + A[41] + A[40]) && 40 +
(A[39] + A[38] + A[37] + A[36] + A[35] + A[34] + A[33] + A[32]) && 32 +
(A[31] + A[30] + A[29] + A[28] + A[27] + A[26] + A[25] + A[24]) && 24 +
(A[23] + A[22] + A[21] + A[20] + A[19] + A[18] + A[17] + A[16]) && 16 +
(A[15] + A[14] + A[13] + A[12] + A[11] + A[10] + A[9]
&/code&&/pre&&/div&&p&之后的三个操作:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&val += val && 32;
val += val && 16;
val += val && 8;
&/code&&/pre&&/div&&p&每次将 &code&val&/code& 折半然后相加。&/p&&p&第一次折半(&code&val += val && 32&/code&)后,得到的 &code&val&/code& 的低 32 位:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(A[31] + A[30] + A[29] + A[28] + A[27] + A[26] + A[25] + A[24] + A[63] + A[62] + A[61] + A[60] + A[59] + A[58] + A[57] + A[56]) && 24 +
(A[23] + A[22] + A[21] + A[20] + A[19] + A[18] + A[17] + A[16] + A[55] + A[54] + A[53] + A[52] + A[51] + A[50] + A[49] + A[48]) && 16 +
(A[15] + A[14] + A[13] + A[12] + A[11] + A[10] + A[9]
+ A[8] + A[47] + A[46] + A[45] + A[44] + A[43] + A[42] + A[41] + A[40])
+ A[0] + A[39] + A[38] + A[37] + A[36] + A[35] + A[34] + A[33] + A[32])
&/code&&/pre&&/div&&p&第二次折半(&code&val += val && 16&/code&)后,得到的 &code&val&/code& 的低 16 位:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&15] + A[14] + A[13] + A[12] + A[11] + A[10] + A[9]
+ A[8] + A[47] + A[46] + A[45] + A[44] + A[43] + A[42] + A[41] + A[40] + A[31] + A[30] + A[29] + A[28] + A[27] + A[26] + A[25] + A[24] + A[63] + A[62] + A[61] + A[60] + A[59] + A[58] + A[57] + A[56])
+ A[0] + A[39] + A[38] + A[37] + A[36] + A[35] + A[34] + A[33] + A[32] + A[23] + A[22] + A[21] + A[20] + A[19] + A[18] + A[17] + A[16] + A[55] + A[54] + A[53] + A[52] + A[51] + A[50] + A[49] + A[48])
&/code&&/pre&&/div&&p&第三次折半(&code&val += val && 8&/code&)后,得到的 &code&val&/code& 的低 8 位:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&(A[7]
+ A[0] + A[39] + A[38] + A[37] + A[36] + A[35] + A[34] + A[33] + A[32] + A[23] + A[22] + A[21] + A[20] + A[19] + A[18] + A[17] + A[16] + A[55] + A[54] + A[53] + A[52] + A[51] + A[50] + A[49] + A[48] + A[15] + A[14] + A[13] + A[12] + A[11] + A[10] + A[9]
+ A[8] + A[47] + A[46] + A[45] + A[44] + A[43] + A[42] + A[41] + A[40] + A[31] + A[30] + A[29] + A[28] + A[27] + A[26] + A[25] + A[24] + A[63] + A[62] + A[61] + A[60] + A[59] + A[58] + A[57] + A[56])
&/code&&/pre&&/div&&p&可以看到,经过三次折半,64 个位的值全部累加到低 8 位,最后取出低 8 位的值,就是 &code&x&/code& 这个数字二进制里 1 的数目了。&/p&&hr&&p&位运算以它独特的优点(简洁、性能棒)吸引着程序员,比如 &code&LuaJIT&/code& 内置了 &code&bit&/code& 这个模块,允许程序员在 Lua 程序里使用位运算。学会使用位运算对程序员来说也是一种进步,值得我们一直去研究。&/p&
众所周知 nginx 以性能而出名,这和它优秀的代码实现有着密切的关系,而本文所要讲述的——位运算,也是促成 nginx 优秀性能的原因之一。位运算在 nginx 的源码是处处可见,从定义指令的类型(可以携带多少参数,可以出现在哪些配置块下),到标记当前请求…
&figure&&img src=&https://pic1.zhimg.com/v2-a131ef44ebf312_b.jpg& data-rawwidth=&2725& data-rawheight=&1409& class=&origin_image zh-lightbox-thumb& width=&2725& data-original=&https://pic1.zhimg.com/v2-a131ef44ebf312_r.jpg&&&/figure&&h2&一、字符串(String)类算法面试题&/h2&&p&&b&1) &/b&String, StringBuilder 和 StringBuffer 三者有什么不同?&/p&&p&&b&2) &/b&为什么String类型在Java中是不可变的?&/p&&p&&b&3) &/b&在Java语言中,如何split string?&br&&b&4) &/b&为什么char数组能比String更好的去存储password?&br&&br&&b&5) &/b&写一个函数判断一个字符串是否是回文串?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/valid-palindrome/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/valid-palindrome/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/valid-palindrome/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/v&/span&&span class=&invisible&&alid-palindrome/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&6) &/b&写一个函数实现从字符串中删除任意给出的字符&/p&&p&&b&7) &/b&分别用递归和非递归的方法,打印出一个字符串的所有全排列&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/string-permutation-ii/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/string-permutation-ii/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/string-permutation-ii/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&tring-permutation-ii/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&8) &/b&写一个函数,从给出的字符串中求出由这些字母构成的最长的回文串。&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/longest-palindrome/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/longest-palindrome/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/longest-palindrome/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/l&/span&&span class=&invisible&&ongest-palindrome/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&9) &/b&如何从一个字符串中找出第一个非重复的字符?&/p&&p&&b&10) &/b&如何并发计算一个给定的字符在字符串中出现的次数?&/p&&p&&b&11) &/b&写出一个函数判断两个字符串是否可以通过改变字母的顺序变成一样的字符串&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/two-strings-are-anagrams/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/two-strings-are-anagrams/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/two-strings-are-anagrams/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/t&/span&&span class=&invisible&&wo-strings-are-anagrams/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&12) &/b&如何转换以一个数字化的字符串变成一个整数?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/string-to-integer/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/string-to-integer/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/string-to-integer/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&tring-to-integer/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&h2&二、数组(Array)类算法面试题&/h2&&p&&b&1) &/b&一个包含1-100数字的数组中,有一个数字丢失了,如何快速的找出它?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/find-the-missing-number/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://www.lintcode.com/en/problem/find-the-missing-number/&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/find-the-missing-number/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/f&/span&&span class=&invisible&&ind-the-missing-number/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&2)&/b&一个包含1-100数字的数组中,有一个数字重复了,如何快速的找出它?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/find-the-duplicate-number/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&http://www.lintcode.com/en/problem/find-the-duplicate-number/&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/find-the-duplicate-number/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/f&/span&&span class=&invisible&&ind-the-duplicate-number/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&3)&/b&一个包含1-100数字的数组中,有多个数字重复了,如何快速的找出他们?&/p&&p&&b&4) &/b&给出两个数组,如何找出那些出现在第一个数组中,但是没有出现在第二个数组中的数字?&/p&&p&&b&5) &/b&如何找出第二大的数在一个整数数组中?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/second-max-of-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/second-max-of-array/&/span&&span class=&ellipsis&&&/span&&/a&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/second-max-of-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&econd-max-of-array/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&6) &/b&找出所有和等于给出数组的两两组合的pair对&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/two-sum-unique-pairs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/two-sum-unique-pairs/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/two-sum-unique-pairs/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/two-sum-unique-pairs/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&7) &/b&用Java实现如何从一个数组中移除重复的元素?&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/remove-duplicate-numbers-in-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/remove-duplicate-numbers-in-array/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/remove-duplicate-numbers-in-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/remove-duplicate-numbers-in-array/&/span&&span class=&ellipsis&&&/span&&/a& &b&8) &/b&如何找出最大和最小的数字在一个数组中?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/max-of-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/max-of-array/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/zh-cn/problem/max-of-array/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/zh-cn/prob&/span&&span class=&invisible&&lem/max-of-array/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&9) &/b&如何找出最大的两个数在一个数组中?&/p&&h2&三、链表(Linkedlist)类算法题&/h2&&p&&b&1) &/b&如何找出一个单向链表的中间元素?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/middle-of-linked-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/middle-of-linked-list/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/middle-of-linked-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/m&/span&&span class=&invisible&&iddle-of-linked-list/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&2) &/b&如何找出单向链表中的倒数第3个元素?&br&&br&OJ 地址:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/nth-to-last-node-in-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/nth-to-last-node-in-list/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案: &a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/nth-to-last-node-in-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/n&/span&&span class=&invisible&&th-to-last-node-in-list/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&3) &/b&如何判断一个单项链表是否与环? 如果有环,如何找出环的起始位置?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/linked-list-cycle/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/linked-list-cycle/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/linked-list-cycle/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/l&/span&&span class=&invisible&&inked-list-cycle/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&4)&/b&如何翻转一个链表?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/reverse-linked-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/reverse-linked-list/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/reverse-linked-list/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/r&/span&&span class=&invisible&&everse-linked-list/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&5) &/b&比较链表和数组这两个数据结构的不同点&/p&&h2&四、二叉树(Binary Tree)类算法题&/h2&&p&&b&1) &/b&如何找出树的深度?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/maximum-depth-of-binary-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/maximum-depth-of-binary-tree/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/maximum-depth-of-binary-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/m&/span&&span class=&invisible&&aximum-depth-of-binary-tree/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&2)&/b&写一个函数打印出树的中序遍历&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/binary-tree-inorder-traversal/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/binary-tree-inorder-traversal/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/binary-tree-inorder-traversal/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/b&/span&&span class=&invisible&&inary-tree-inorder-traversal/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&3) &/b&打印出书的所有叶子节点&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/binary-tree-leaf-sum/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/binary-tree-leaf-sum/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/binary-tree-leaf-sum/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/b&/span&&span class=&invisible&&inary-tree-leaf-sum/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&4) &/b&用Java写一个方法,判断一棵树是否是二叉搜索树&/p&&p&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/validate-binary-search-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/validate-binary-search-tree/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/validate-binary-search-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/v&/span&&span class=&invisible&&alidate-binary-search-tree/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&5) &/b&用Java判断一棵树是否是平衡树&/p&&p&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/balanced-binary-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/balanced-binary-tree/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/balanced-binary-tree/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/b&/span&&span class=&invisible&&alanced-binary-tree/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&h2&&u&五、查找和排序类(Searching and Sorting)&/u&&/h2&&p&&b&1) &/b&写一个程序用快排原地排序一个数组&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/sort-integers-ii/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/sort-integers-ii/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/sort-integers-ii/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&ort-integers-ii/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&2) &/b&用Java或者C++写一个程序去实现二分搜索算法&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/classical-binary-search/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/classical-binary-search/&/span&&span class=&ellipsis&&&/span&&/a&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/classical-binary-search/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/c&/span&&span class=&invisible&&lassical-binary-search/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&3) &/b&如何使用&b&Comparator, 在Java内实现对对象的排序&/b&&/p&&p&&b&4) &/b&用Java写一个程序去实现插入排序&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/sort-integers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/sort-integers/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/sort-integers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&ort-integers/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&5) &/b&用Java写一个程序去实现冒泡排序&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/sort-integers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/sort-integers/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/sort-integers/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/s&/span&&span class=&invisible&&ort-integers/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&h2&六、数(Numbers)&/h2&&p&&b&1) &/b&写一个程序去判断一个数是否是2的幂次&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/o1-check-power-of-2/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/o1-check-power-of-2/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/o1-check-power-of-2/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/o&/span&&span class=&invisible&&1-check-power-of-2/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&2) &/b&写一个程序去判断一个数字是否是回文的&/p&&p&&b&3) &/b&写一个程序判断一个整数是否是水仙花数?&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/narcissistic-number/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/narcissistic-number/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/narcissistic-number/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/n&/span&&span class=&invisible&&arcissistic-number/&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&&b&4) &/b&写一个程序,找出给出数字的所有素因子&br&&br&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/prime-factorization/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/prime-factorization/&/span&&span class=&ellipsis&&&/span&&/a&&br&&br&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/prime-factorization/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/p&/span&&span class=&invisible&&rime-factorization/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&b&5) &/b&写一个函数去计算第n个斐波那契数?是否能用递归和非递归两种方法?&/p&&p&OJ 测试:&a href=&https://link.zhihu.com/?target=http%3A//www.lintcode.com/en/problem/fibonacci/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lintcode.com/en/problem&/span&&span class=&invisible&&/fibonacci/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&参考答案:&a href=&https://link.zhihu.com/?target=http%3A//www.jiuzhang.com/solution/fibonacci/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&jiuzhang.com/solution/f&/span&&span class=&invisible&&ibonacci/&/span&&span class=&ellipsis&&&/span&&/a&&/p&&h2&知乎 Live 预告 &/h2&&h2&如何高效学习Java:Java研发工程师学习路线&/h2&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&Live 主讲人
毕业于北京大学信息科学与技术学院。就职于 Google,斩获 offer 包括 Baidu, 网易, Hulu, Google, Microsoft, 小米等。
Chengliang Gao
北京大学网络与信息系统研究所硕士在读,曾在微软亚洲研究院(MSRA)实习,负责Android平台上项目的算法调优及部分模块实现。
Live 大纲:
编程语言是什么样的角色?
如何学习 Java 才能保持自己的竞争力?
Java 的具体学习路线和学习内容
&/code&&/pre&&/div&&p&此次 Live 将在北京时间2月8日周四晚上8点举行,报名请戳:&/p&&a href=&https://www.zhihu.com/lives/074048& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/26bd9bde846f0777ecef6f095f6dc1a1_ipico.jpg& data-image-width=&250& data-image-height=&250& class=&internal&&如何高效学习Java:Java研发工程师学习路线&/a&&p&&/p&
一、字符串(String)类算法面试题1) String, StringBuilder 和 StringBuffer 三者有什么不同?2) 为什么String类型在Java中是不可变的?3) 在Java语言中,如何split string? 4) 为什么char数组能比String更好的去存储password? 5) 写一个函数判断一个字…
&p&没有最好的IDE,只有最适合自己的IDE。个人认为初学者基本都是使用 Eclipse 入门,后期都慢慢地转移到 IntelliJ IDEA 。给希望快速学习和掌握 IntelliJ IDEA 2017 的同学推荐一个教程。&/p&&ol&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/intellij-idea-tutorial-overview.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntelliJ IDEA 2017 教程之概述&/a& &/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/install-intellij-idea-2017.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图文详解如何安装 Intellij IDEA 2017&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/intellij-idea-2017-directory.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析 IntelliJ IDEA 2017 的目录结构 &/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/intellij-idea-2017-config.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图文详解如何配置 IntelliJ IDEA 2017&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/import-maven-project-to-idea.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何导入一个 Maven 项目到 IntelliJ IDEA 2017&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/idea-top10-features-one.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntelliJ IDEA 2017 的10大特性(1)&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/intellij-idea-%259a%e5%25a4%25a7%25e7%%25e6%.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntelliJ IDEA 2017 的10大特性(2) &/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/idea-new-project.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&图文详解如何在 IntelliJ IDEA 2017 新建项目&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/idea-top-keyshorts.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntelliJ IDEA 2017 中最常用快捷键 &/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/idea-advanced-features-one.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntelliJ IDEA 2017 的高级特性(1)&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/idea-import-github-projects.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Intellij IDEA 2017 如何导入 GitHub 中的项目&/a&&/li&&li&&a href=&//link.zhihu.com/?target=http%3A//www.tiantianbianma.com/personal-config-idea.html/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何个性化配置 IntelliJ IDEA 2017&/a&&/li&&/ol&
没有最好的IDE,只有最适合自己的IDE。个人认为初学者基本都是使用 Eclipse 入门,后期都慢慢地转移到 IntelliJ IDEA 。给希望快速学习和掌握 IntelliJ IDEA 2017 的同学推荐一个教程。
&p&&b&微信跳一跳已经落伍了,最近不是出了一个头脑王者的小游戏么,今天用Python编写一个脚本,调用百度API,进行自动检索答题,自动识别出现频率最多的答案,然后列出并选择。&/b&&/p&&p&首先,我们要认识到,什么是脚本&/p&&p&脚本的本质是什么?&/p&&p&它就是一段代码,只不过让对应的解释器执行即可;和它相对应的是编译型代码,需要编译成可执行文件或者目标文件,在指定平台上运行或者使用。&/p&&p&在我所了解的脚本中,最喜欢哪个?&/p&&p&对于windows下批处理,linux shell, mac shell, python, perl, VBScript这些脚本中,最喜欢的就是python.原因在于,它从一方面很像c语言,简洁,很多时候代码很易懂易写;另一方面很像c++,支持面向对象的处理。&/p&&p&好对与脚本有了一个认识以后开始说我们的脚本&/p&&p&今天写的代码大概有八十多行吧&/p&&p&导入模块&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-a3388aeefb286e8bf4bc372d9c0c8ffe_b.jpg& data-size=&normal& data-rawwidth=&533& data-rawheight=&117& class=&origin_image zh-lightbox-thumb& width=&533& data-original=&http://pic3.zhimg.com/v2-a3388aeefb286e8bf4bc372d9c0c8ffe_r.jpg&&&figcaption&Python学习群:&/figcaption&&/figure&&p&其中我们今天会调用百度的AIP模块,是免费的,大家可以自行百度去下载模块,剩下的模块,都可以通过&/p&&p&pip install 模块名称,下载,如果pip下载出错的话可以上Python官网,下载Python专用的模块,然后进行解压,这里小编就不做介绍了,不懂的可以看小编以前的文章,都有写&/p&&p&首先来构建我们的主函数&/p&&p&&br&&/p&&figure&&img src=&http://pic4.zhimg.com/v2-441ccc138d129dd2801ecb_b.jpg& data-size=&normal& data-rawwidth=&599& data-rawheight=&220& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&http://pic4.zhimg.com/v2-441ccc138d129dd2801ecb_r.jpg&&&figcaption&Python学习群:&/figcaption&&/figure&&p&调用百度的接口(第三方库也行)&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-cbad1b6c1dc50ac7cd32d8de_b.jpg& data-size=&normal& data-rawwidth=&640& data-rawheight=&184& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&http://pic3.zhimg.com/v2-cbad1b6c1dc50ac7cd32d8de_r.jpg&&&figcaption&Python学习群:&/figcaption&&/figure&&p&小编打马赛克的地方是小编申请的百度的一个接口,你们也可以去申请一个,是免费的不懂的可以留言问我&/p&&p&&br&&/p&&figure&&img src=&http://pic2.zhimg.com/v2-35fe836a3aee793ed071b19_b.jpg& data-size=&normal& data-rawwidth=&640& data-rawheight=&303& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&http://pic2.zhimg.com/v2-35fe836a3aee793ed071b19_r.jpg&&&figcaption&Python学习群:&/figcaption&&/figure&&p&修饰图片&/p&&p&接下来设置我们图片的大小,把不必要的地方删除,并且进行合并&/p&&p&&br&&/p&&figure&&img src=&http://pic4.zhimg.com/v2-a2c659da24ece902ce7f_b.jpg& data-size=&normal& data-rawwidth=&640& data-rawheight=&753& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&http://pic4.zhimg.com/v2-a2c659da24ece902ce7f_r.jpg&&&figcaption&Python学习群:&/figcaption&&/figure&&p&我们需要的是红色框框选取出来的,所以需要知道每个框框的左上角和右下角的像素点这里小编就不解释了,需要用到画图工具&/p&&p&&br&&/p&&figure&&img src=&http://pic1.zhimg.com/v2-6b03bb7bfec84c5ac6be6dac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&640& data-rawheight=&346& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&http://pic1.zhimg.com/v2-6b03bb7bfec84c5ac6be6dac_r.jpg&&&/figure&&p&&br&&/p&&p&嗯,大概的源码就是这些,是不是很简单啊,短短几十行就能用Python写出一个自动答题的脚本,还是很方便的!&b&Python学习群:&/b&&/p&
微信跳一跳已经落伍了,最近不是出了一个头脑王者的小游戏么,今天用Python编写一个脚本,调用百度API,进行自动检索答题,自动识别出现频率最多的答案,然后列出并选择。首先,我们要认识到,什么是脚本脚本的本质是什么?它就是一段代码,只不过让对应的…
&blockquote&又到年底了,相信过的开心不开心的一年又将过去了,想着不少同学开始计划着今年拿完奖金开始想着换个公司试试看了吧?那今天就给我大家发几个 iOS 、Android 岗位内推,都是业内知名的小伙伴给大家内推哈,大家可以先在年前试试看面一面然后拿到 offer 后,年后拿完奖金后入职。&/blockquote&&p&&br&&/p&&p&本次参与内推的有以下企业,全部提供了该企业员工或者用人部门老大的微信号,以及公司内部的邮箱,希望可以让更多同学直接跟用人部门沟通,最后获取到新的工作机会。&/p&&p&&br&&/p&&ul&&li&蚂蚁金服 iOS、Android;&/li&&li&手机淘宝iOS、Android;&/li&&li&网易北京电商团队iOS;&/li&&li&小米iOS、Android ;&/li&&li&FaceU激萌 iOS;&/li&&li&京东iOS、 Android ;&/li&&li&英语流利说 iOS、Android 、前端;&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-eb0d072f6a680c1dd78f4_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&蚂蚁金服:给大家内推的是推特中文圈 / JSPatch 作者 bang 神,相信大家都知道的哈。&/b&&/p&&p&&br&&/p&&p&蚂蚁金服财富事业群招 &b&iOS / Android/&/b& &b&前端&/b& &b&开发&/b&,负责开发蚂蚁财富app以及支付宝上财富相关的业务,职级 p6-p8,地点北京上海杭州。团队推崇全栈,有业务开发和基础架构岗位,欢迎来勾搭.&/p&&p&&br&&/p&&p&&b&内推方式:&/b&发简历到 &a href=&mailto:zhenchao.&&zhenchao.&/a& 。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-1b0e94e2ae7c67f199dcf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&阿里巴巴手淘移动高可用团队招人:&/b&&/p&&p&&br&&/p&&p&&b&团队介绍:&/b&我们是新零售技术事业群基础平台部的移动高可用团队(学名就是这么长),简要介绍就是我们是手机淘宝、手机天猫的架构核心团队,坐标杭州阿里巴巴西溪园区。&/p&&p&&br&&/p&&p&&b&职责:&/b&因为我们是基础架构团队,我们负责整个手淘和手猫的稳定性、性能、体验优化,从技术手段提升客户端的品质。&/p&&p&&br&&/p&&p&包括如下但不限于:&/p&&p&&br&&/p&&ol&&li&内核研究&/li&&li&稳定性、性能监控研发&/li&&li&高可用体系建设&/li&&li&集团自动化工具开发及建设&/li&&li&各种你觉得有价值的知识研究&/li&&/ol&&p&&br&&/p&&p&&b&希望你是这样的:&/b&对于不同的公司,面临的业务挑战各不相同,每个人从事的工作和精力都不一样。我们不会刻意刁难问题。我们希望通过面试来加深彼此之间的了解,如果你在面试过程中对我们所做的事产生浓厚的兴趣,那最好不过啦。&/p&&p&&br&&/p&&p&只要你热爱学习、热爱思考,面对困难和从未尝试的问题不断探索,能够独立研究并解决他人没突破的瓶颈,请不要犹豫,赶快简历投起来把。&/p&&p&&br&&/p&&p&&b&iOS/Android 的人才都热烈欢迎&/b&,我们求贤若渴,诚心欢迎各位有志之士一起加入。无论愿意不愿意最后加入我们,都欢迎大家来尝试,我们聊聊,做个朋友也很好~&/p&&p&&br&&/p&&p&&b&内推方式:&/b&简历发到:&a href=&https://link.zhihu.com/?target=http%3A//mingyi.wzq%40alibaba-inc.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mingyi.wzq@alibaba-inc.com&/a& &/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ff76ce81a253af9124efac642214dba3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&网易北京电商团队招人啦:校招、社招 iOS 客户端&/b&&/h2&&p&&br&&/p&&p&&b&工作职责:&/b&负责网易北京电商 iOS 客户端产品的开发和维护,负责性能优化、架构优化等重点难点技术攻坚。&/p&&p&&br&&/p&&p&&b&岗位要求:&/b&&/p&&ul&&li&全国重点高校本科及以上学历,1 年以上的 iOS 开发经验&/li&&li&熟悉iOS开发技术,包括UI、网络、安全等方面&/li&&li&熟悉iOS框架以及各种特性,深刻理解常用设计模式&/li&&li&有较好的学习能力和沟通能力,有创新能力和责任感,对移动端产品有浓厚的兴趣;&/li&&li&熟悉团队协作模式,在项目中使用过git做版本管理;&/li&&li&有较好的学习能力和沟通能力,有创新能力和责任感,对新技术充满好奇&/li&&/ul&&p&&br&&/p&&p&&b&岗位福利:&/b&&/p&&p&14 薪 + 免费食堂 + 季度奖 + 年终奖 +国内外旅游等&/p&&p&不加班,弹性工作&/p&&p&&br&&/p&&p&&b&内推方式:&/b&发送邮件到 &a href=&mailto:ease.com&&ease.com&/a& &/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-cbc00bf26da4a8bc7d87_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&小米 MIOT - 智能家庭(米家App) - iOS开发工程师&/b&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&负责米家App iOS平台的研发相关工作。&/p&&p&&br&&/p&&p&&b&岗位要求:&/b&&/p&&p&&br&&/p&&ul&&li&1.两年以上iOS相关开发经验。&/li&&li&2.熟练掌握的C,C++和objective-C的编码技能,以及iPhone/iPad界面及交互开发。&/li&&li&3.掌握CocoaPods/Carthage等第三方库集成工具。&/li&&li&4.掌握多线程编写。&/li&&li&5.熟练掌握TCP/IP、HTTP。&/li&&li&6.具备量好的英文资料阅读能力、团队协作意识。&/li&&li&7.热爱设计&编写程序,对行业充满激情,有独立的用代码解决问题的能力。&/li&&li&8.乐于迎接挑战和钻研新技术,快速学习,对业内技术及趋势有较强的敏感度。&/li&&/ul&&p&&br&&/p&&p&&b&加分项:&/b&&/p&&ul&&li&1.了解蓝牙协议,能够熟练运用CoreBluetooth框架。&/li&&li&2.了解React-Native框架(或其他基于JavaScriptCore的开发框架),熟悉JavaScript语言。&/li&&li&3.熟练掌握Swift;有音视频相关开发经验,熟练运用各种编解码器,熟悉OpenGLES。&/li&&/ul&&p&&br&&/p&&p&&b&内推方式:&/b&加微信 xiaohuahua185 ,备注寻求小米内推,也可以将简历发到:&/p&&p&&br&&/p&&p&&b&MIUI
Android 研发工程师 :&/b&&/p&&p&&br&&/p&&p&&b&工作职责:&/b&&/p&&ul&&li&1.负责MIUI Android平台上的应用开发工作;&/li&&li&2.负责优化客户端软件的模块结构和流程逻辑;&/li&&li&3.负责优化客户端软件相关产品适配,升级;&/li&&li&职位要求:&/li&&li&1.985/211本科或以上学历,硕士优先,计算机相关专业,2年以上Android开发经验;&/li&&li&2.有扎实的Java语言基础,熟悉面向对象化编程思想和设计模式;&/li&&li&3.熟悉Android系统,熟悉Android软件的开发、测试、分发流程,熟悉Android开发工具和测试工具的使用;&/li&&li&4.对JNI/NDK/Framework有研究者优先;&/li&&li&5.了解HTML5,JS相关技术者优先;&/li&&li&6.熟悉移动网络通信机制,对Socket通信,TCP/IP和HTTP有较深刻理解和经验,有网络编程经验者或Java Server端开发经验者优先;&/li&&li&7.热爱移动互联网,有大型互联工公司经验优先。&/li&&/ul&&p&&br&&/p&&p&&b&内推方式:&/b&加微信 xiaohuahua185 ,备注寻求小米内推,也可以将简历发到:&/p&&p&&br&&/p&&p&&b&Android开发工程师(生态链):&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&负责小米生态链信息化系统Android客户端开发,能独立完成模块设计及开发。&/p&&p&&br&&/p&&p&&b&职位要求:&/b&&/p&&ul&&li&1、本科及以上学历,2年以上Android项目开发经验;&/li&&li&2、熟练掌握JAVA/C/C++,熟练掌握算法,数据结构,设计模式,计算机网络;&/li&&li&3、熟悉Android的四大组件,进程间通信,UI组件等的使用及其原理,具有性能优化基础知识和经验者优先;&/li&&li&4、有企业信息化相关开发经验优先;&/li&&li&5、较强的主动学习能力,团队沟通协作能力,良好的编码习惯和风格,能够承受较大压力。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&b&内推方式:&/b&加微信 xiaohuahua185 ,备注寻求小米内推,也可以将简历发到:&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c6b53b37cf65d3fc26d4cede840352cd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&深圳脸萌科技诚招各路大牛和技术爱好者,多个岗位,技术、产品、运营、测试等你来投。&/b&只要你拥有足够的技术热情,基本功扎实,喜欢做娱乐向的工具类产品,就有机会加入我们。我们是一群热血与稍稍没有节操的创业团队,目标是打造让年轻人着迷的精品,做年轻人最喜欢的科技公司,我们的口号是:在年轻人里面我们是最牛的,在牛人里面我们是最年轻的!&/p&&p&&br&&/p&&p&具体的工作介绍就不赘述了,拉勾和boss直聘上都能查到,这里就介绍一个跟公司文化有关的真实故事。最近一个版本上线以后,老板发全员邮件,深刻检讨因为自己的需求变更太随意,导致研发团队要删除已实现功能的代码,表示道歉并确保以后的事情不再发生
&/p&&p&&br&&/p&&p&&b&内推方式:&/b&如想了解更多,可以加 iOS 负责人微信:tomtan ,备注内推。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-54de139834caa9e0930eaa6b9e159b76_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&京东商城 iOS 客户端&/b& &b&- iOS 研发工程师&/b&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&&/p&&ul&&li&1.负责iOS平台手机京东APP产品开发和维护; &/li&&li&2.负责根据要求完成APP产品程序概要设计及需求实现; &/li&&li&3.负责根据产品开发计划,按时提交高质量代码,完成开发任务; &/li&&li&4.负责产品技术创新,架构及性能优化; &/li&&li&5.负责解决产品开发中的技术难题。&/li&&/ul&&p&&br&&/p&&p&&b&岗位要求:&/b&&/p&&ul&&li&1.大学本科及以上学历,计算机相关专业优先; &/li&&li&2.精通Objective C语言,具备3年及以上的移动应用研发经验; &/li&&li&3.熟悉iOS应用开发框架,能独立开发高性能的iOS应用; &/li&&li&4.熟悉iOS平台下系统控件、内存管理、多线程、Block、架构设计等技能; &/li&&li&5.熟练使用Instruments进行性能优化&/li&&li&6.富有激情,抗压能力强,具有强烈的责任心与团队合作精神,良好的沟通能力; &/li&&/ul&&p&&br&&/p&&p&&b&加分项:&/b&&/p&&ul&&li&1. 有音视频相关开发经验者优先&/li&&li&2. 有Python、Java、H5开发经验者优先&/li&&/ul&&p&&br&&/p&&p&&b&工作地点&/b&:北京市朝阳区北辰世纪中心&/p&&p&&br&&/p&&p&&b&内推方式:&/b&微信添加 robinkey 备注内推,或发送简历到&a href=&mailto:&&&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&京东商城Android客户端&/b& &b&- Android研发工程师&/b&&/p&&p&&br&&/p&&p&&b&工作职责:&/b&&/p&&ul&&li&负责商城的 Android 端 App 框架设计与开发;&/li&&li&负责新技术调研,关键技术选型,技术难题攻关等工作;&/li&&li&指导开发工程师完成开发工作,保证代码质量;&/li&&li&App 性能持续优化;&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&b&任职资格:&/b&&/p&&ul&&li&精通 Java,熟悉常用的数据结构和算法;&/li&&li&熟悉网络通信机制及常用数据传输协议;&/li&&li&有多个完整的Android项目经验,并至少在一个项目当中承担核心设计与开发工作;&/li&&li&具有良好的团队合作精神和沟通能力;&/li&&li&对产品有较强的敏感度,有责任心;&/li&&li&有架构搭建经验优先&/li&&/ul&&p&&br&&/p&&p&&b&工作地点:&/b&北京市朝阳区北辰世纪中心&/p&&p&&br&&/p&&p&&b&内推方式:&/b&微信添加hardy_han001备注内推,或发送简历到 &a href=&mailto:&&&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5cbe102b3ede559aec4b0b0fc7ae3e1b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&英语流利说内推,工作地点上海。内推方式:微信添加wise655688&/b& &b&备注内推,或发送简历到 &a href=&mailto:&&&/a&&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&职位名称:前端工程师&/b&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&&/p&&ul&&li&负责英语流利说相关业务前端开发;&/li&&li&负责参与 Web 前沿技术研究和新技术调研。&/li&&/ul&&p&&br&&/p&&p&&b&任职条件:&/b&&/p&&ul&&li&基础扎实,数据结构等基础知识掌握牢固;&/li&&li&熟练掌握 JavaScript,HTML,CSS,有 MVVM 或 MVC 模式开发经验的优先;&/li&&li&有独立完整开发 Web 前端工程经验优先;&/li&&li&对于新技术敏感,但能够系统地学习和合理判断对技术的运用;&/li&&li&有纯前端渲染工程(即前后端开发分离)经验优先;&/li&&li&有良好的前端代码风格,开发时有写单元测试经验优先!&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&b&职位名称:iOS工程师&/b&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&负责英语流利说系列移动 App 产品的开发。&/p&&p&&br&&/p&&p&&b&任职条件:&/b&&/p&&ul&&li&基础扎实,数据结构等基础知识掌握牢固,有良好的编码风格;&/li&&li&熟练掌握 Swift 语言,有丰富的 iOS 开发经验,熟练使用 Xcode 及相关调试工具;&/li&&li&热爱移动 App 开发,对新事物敏感,喜欢探索,有较强的创新意识与责任感;&/li&&li&有独立完整开发 App 经验优先,有个人上架 App 优先。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&职位名称:Android 工程师&/b&&/p&&p&&br&&/p&&p&&b&岗位职责:&/b&负责英语流利说系列移动 App 产品的开发。&/p&&p&&br&&/p&&p&&b&任职条件:&/b&&/p&&ul&&li&3年以上 Android 平台开发经验,作为主力开发人员至少完整开发过一个 Android 应用;&/li&&li&熟悉 Android 的 UI 布局,分辨率,版本适配;熟练使用 Android Studio 及相关调试工具;&/li&&li&熟悉 Android 的内存使用和性能优化;&/li&&li&有 Koltin 开发经验的优先;&/li&&li&有开源的 Android 项目者优先;&/li&&li&有音频类应用开发经验者优先。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-e063a021b5b2df26db07d41a4bddc79b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&128& data-rawheight=&128& class=&content_image& width=&128&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&b&最后给大家发两个面试指南,分别是针对 Android 和 iOS的。&/b&&/p&&p&&br&&/p&&p&《iOS 面试指南》&a href=&https://link.zhihu.com/?target=https%3A//xiaozhuanlan.com/ios-swift-interview& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&iOS 面试指南 - 小专栏&/a&&/p&&p&由来 @故胤道长
@bestswifter @Joy__xx @画渣程序猿mmoaay
@bang @愚公编程MrPeak
@没故事的卓同学
@tom510230 @盗版五子棋
一起创建小额付费专栏,作者们来自五湖四海国内有腾讯、百度、阿里,Faceu ,饿了么,国外有亚马逊、Facebook 等,同样也有正在参与创业的同学,《iOS 面试指南》 内容上面包含iOS 面试题解析、iOS 发展趋势、面试的准备,技术精进等等话题都有提到,是一个不可多得的好专栏。&/p&&p&&br&&/p&&p&&b&目前已经发布的文章:&/b&&/p&&p&&br&&/p&&ul&&li&《让 BAT 的 Offer 不再难拿》作者:bestswifter&/li&&li&《如何面试 iOS 工程师》作者:bang&/li&&li&《面试中的那些 git 问题》作者:画渣程序猿mmoaay&/li&&li&《面试指南之 App 质量与性能如何保证》作者:Joy__xx&/li&&li&《面试官更重视的素养》作者:Lastdays&/li&&li&《2018 年将至,iOS 工程师如何自我提高》作者:bestswifter&/li&&li&《工程师必看的 20 道 iOS 面试题》作者:故胤道长&/li&&li&《面试前的个人心态》作者:盗版五子棋&/li&&/ul&&p&&br&&/p&&p&后续@愚公编程MrPeak 高峰老师将会分享他从阿里巴巴到 Facebook 的面试准备以及面试经历,文章应该会涉及到多方面知识,tom510230 老师也会分享他在Faceu 面试 iOS 工程师的一些心得,没故事的卓同学的文章同样非常值得期待。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&《Android 面试指南》&a href=&https://link.zhihu.com/?target=https%3A//xiaozhuanlan.com/android-interview& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Android 面试指南 - 小专栏&/a&&/p&&p&由来自前微信工程师的张绍文、欢聚时代的Dclock、阿里巴巴的 jack、wingjay、悦跑圈的键盘男、Powerinfo 许建林(Piasy)、腾讯的宅男潇涧、映客 Android 架构师 Jacky 王世昌、GcsSloop、聚美优品的孤独狂饮、刚刚经历校招的拿到美团华为offer 的LTNS,即将入职的 MIUI 的Jucongyuan
一起创建小额付费专栏。&/p&&p&&br&&/p&&p&专栏除了对 Android 面试心得面试题的解析之外,还包含了对大公司小公司,职业发展等等各种探讨。订阅本专栏还将可以进入《Android面试指南》作者微信群,和腾讯、微信、阿里巴巴等等技术大牛一起交流,同时在职业成长、求职过程中遇到的问题也可以直接发布到群里获取作者们的答疑,另外我们还会邀请小米、360、百度等其他技术大牛进群给大家答疑以及内推。&/p&&p&&br&&/p&&p&&b&目前已经发布的文章:&/b&&/p&&p&&br&&/p&&ul&&li&《谈谈我对大公司、小公司的理解 》&/li&&li&《我们需要怎样的工程师,我们需要成为怎样的工程师?》&/li&&li&《Android 开发面试 “108” 问》&/li&&li&《应届生应该如何准备校招 Android 面试》&/li&&li&《微信资深工程师张绍文答读者问:T 型工程师更受大公司欢迎》&/li&&li&《答读者问:准备面试需要做哪些技术储备,面试官更加关心什么方面的技术点?》&/li&&li&《拿到了新浪微博、小米和京东的 Android offer,应该如何做选择?》&/li&&li&《当你求职跳槽时,需要注意的一些细节》&/li&&li&《2017 阿里、百度、美团、京东、今日头条、华为等秋季校招Android面经》&/li&&li&《Android面试指南 — 算法面试心得》&/li&&/ul&&p&&br&&/p&&p&&b&等等18个文章。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&最后大家觉得好的话,点个赞支持一下。么么哒。&/b&&/p&
又到年底了,相信过的开心不开心的一年又将过去了,想着不少同学开始计划着今年拿完奖金开始想着换个公司试试看了吧?那今天就给我大家发几个 iOS 、Android 岗位内推,都是业内知名的小伙伴给大家内推哈,大家可以先在年前试试看面一面然后拿到 offer 后,…
&figure&&img src=&https://pic1.zhimg.com/v2-f5bc200ab_b.jpg& data-rawwidth=&500& data-rawheight=&235& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic1.zhimg.com/v2-f5bc200ab_r.jpg&&&/figure&&h2&&b&1. 后台开发工程师(深圳)&/b&&/h2&&p&工作职责:&/p&&ul&&li&本科及以上学历,两年以上工作经验;&/li&&li&精通C++编程语言,有丰富的linux项目开发经历;&/li&&li&熟练掌握TCP/IP网络编程,熟悉互联网应用协议,扎实的操作系统\数据结构\算法基础;&/li&&li&有良好的问题分析、逻辑推理能力。善于解决疑难问题;&/li&&li&对mysql、redis等数据库存储实现有深入了解;&/li&&li&掌握python\php\go等编程语言加分;&/li&&li&有大数据处理、机器学习算法理论基础加分。&/li&&/ul&&p&工作要求:&/p&&ul&&li&本科及以上学历;&/li&&li&2年以上Unix/Linux操作系统下的C/C++项目的开发经验;&/li&&li&熟悉网络编程,熟悉Linux下的mysql开发;&/li&&li&精通TCP/IP协议及编程,熟悉互联网应用协议;&/li&&li&熟悉面向对象的大型分布式系统设计与开发,了解中间件的技术以及基于中间件的开发模式;&/li&&li&全面的软件知识结构(操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全);&/li&&li&具备良好的分析解决问题能力,能独立承担任务和有系统进度把控能力;&/li&&li&责任心强,良好的对外沟通和团队协作能力,主动,好学;&/li&&li&具备mysql数据库优化经验、大容量通信系统开发经验者优先考虑。&/li&&/ul&&h2&&b&2. Android开发工程师(深圳)&/b&&/h2

我要回帖

更多关于 华为tag al00拆机教程 的文章

 

随机推荐