@@ -376,18 +376,22 @@ filter 函数的功能相当于过滤器。调用一个布尔函数`bool_func`
376
376
map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:
377
377
378
378
``` python
379
- >> > a= map (lambda x :x* 2 ,[1 ,2 ,3 ])
379
+ >> > a = map (lambda x :x* 2 ,[1 ,2 ,3 ])
380
380
>> > list (a)
381
381
[2 , 4 , 6 ]
382
382
```
383
383
384
384
reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:
385
385
386
386
``` python
387
- >> > functools. reduce(lambda x ,y :x* y,range (1 ,4 ))
387
+ >> > reduce (lambda x ,y :x* y,range (1 ,4 ))
388
388
6
389
389
```
390
390
391
+ ## 23 Python里的拷贝
392
+
393
+ copy()和deepcopy()
394
+
391
395
# 操作系统
392
396
393
397
## 1 select,poll和epoll
@@ -425,6 +429,86 @@ epoll改了三个缺点.
425
429
426
430
## 3 ARP协议
427
431
432
+ ## 4 urllib和urllib2的区别
433
+
434
+ 这个面试官确实问过,当时答的urllib2可以Post而urllib不可以.
435
+
436
+ 1 . urllib提供urlencode方法用来GET查询字符串的产生,而urllib2没有。这是为何urllib常和urllib2一起使用的原因。
437
+ 2 . urllib2可以接受一个Request类的实例来设置URL请求的headers,urllib仅可以接受URL。这意味着,你不可以伪装你的User Agent字符串等。
438
+
439
+
440
+ ## 5 Post和Get
441
+
442
+ ## 6 Cookie和Session
443
+
444
+ ## 7 apache和nginx的区别
445
+
446
+ 1、nginx相对于apache的优点:
447
+ 轻量级,同样起web 服务,比apache占用更少的内存及资源
448
+ 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
449
+ 高度模块化的设计,编写模块相对简单
450
+ 社区活跃,各种高性能模块出品迅速啊
451
+ apache 相对于nginx 的优点:
452
+
453
+ rewrite ,比nginx 的rewrite 强大
454
+ 动态页面
455
+ 模块超多,基本想到的都可以找到
456
+ 少bug ,nginx 的bug 相对较多
457
+
458
+ 超稳定
459
+
460
+ 存在就是理由,一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 吧。
461
+ 后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。这里要注意一点,epoll(freebsd 上是 kqueue )网络
462
+ IO 模型是nginx 处理性能高的根本理由,但并不是所有的情况下都是epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文
463
+ 件,apache 的select 模型或许比epoll 更高性能。当然,这只是根据网络IO 模型的原理作的一个假设,真正的应用还是需要实测了再说
464
+ 的。
465
+
466
+ 2、作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点
467
+ 使 Nginx 尤其受到虚拟主机提供商的欢迎。在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生
468
+ 意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型.
469
+ Nginx
470
+ 作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行
471
+ 服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.
472
+ 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.
473
+ Nginx 是
474
+ 一个安装非常的简单 , 配置文件非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到
475
+ 7* 24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 .
476
+
477
+ 3、Nginx 配置简洁, Apache 复杂
478
+ Nginx 静态处理性能比 Apache 高 3倍以上
479
+ Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用
480
+ Apache 的组件比 Nginx 多
481
+ 现在 Nginx 才是 Web 服务器的首选
482
+
483
+ 4、最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程
484
+
485
+ 5、nginx处理静态文件好,耗费内存少.但无疑apache仍然是目前的主流,有很多丰富的特性.所以还需要搭配着来.当然如果能确定nginx就适合需求,那么使用nginx会是更经济的方式.
486
+ apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx做前端,後端用apache。大型网站建议用nginx自代的集群功能
487
+
488
+ 6、
489
+ 从个人过往的使用情况来看,nginx的负载能力比apache高很多。最新的服务器也改用nginx了。而且nginx改完配置能-t测试一下配置有没
490
+ 有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会非常小心翼翼现在看有好多集群站,前端nginx抗并发,后端apache集群,
491
+ 配合的也不错。
492
+
493
+ 7、nginx处理动态请求是鸡肋,一般动态请求要apache去做,nginx只适合静态和反向。
494
+
495
+ 8、从我个人的经验来看,nginx是很不错的前端服务器,负载性能很好,在老奔上开nginx,用webbench模拟10000个静态文件请求毫不吃力。apache对php等语言的支持很好,此外apache有强大的支持网路,发展时间相对nginx更久,
496
+
497
+ 9、
498
+ Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;其他的当然,Nginx可能会比
499
+ apache支持更高的并发,但是根据NetCraft的统计,2011年4月的统计数据,Apache依然占有62.71%,而Nginx是
500
+ 7.35%,因此总得来说,Aapche依然是大部分公司的首先,因为其成熟的技术和开发社区已经也是非常不错的性能。
501
+
502
+ 10、你对web server的需求决定你的选择。大
503
+ 部分情况下nginx都优于APACHE,比如说静态文件处理、PHP-CGI的支持、反向代理功能、前端Cache、维持连接等等。在
504
+ Apache+PHP(prefork)模式下,如果PHP处理慢或者前端压力很大的情况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
505
+
506
+ 11、可以看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物
507
+
508
+ 12、对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器
509
+
510
+ 13、Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧
511
+
428
512
# 数据结构
429
513
430
514
## 1 红黑树
@@ -433,14 +517,93 @@ epoll改了三个缺点.
433
517
434
518
## 1 台阶问题/斐波纳挈
435
519
520
+ 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
521
+
436
522
``` python
437
523
fib = lambda n : 1 if n <= 2 else fib(n - 1 ) + fib(n - 2 )
438
524
```
439
525
526
+ ## 2 变态台阶问题
527
+
528
+ 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
529
+
530
+ ``` python
531
+ fib = lambda n : i if n < 2 else 2 * fib(n - 1 )
532
+ ```
533
+
534
+ ## 矩形覆盖
535
+
536
+ 我们可以用` 2*1 ` 的小矩形横着或者竖着去覆盖更大的矩形。请问用n个` 2*1 ` 的小矩形无重叠地覆盖一个` 2*n ` 的大矩形,总共有多少种方法?
537
+
538
+ > 第` 2*n ` 个矩形的覆盖方法等于第` 2*(n-1) ` 加上第` 2*(n-2) ` 的方法。
539
+
540
+ ``` python
541
+ f = lambda n : 1 if n < 2 else f(n - 1 ) + f(n - 2 )
542
+ ```
543
+
440
544
## 2 杨氏矩阵查找
441
545
442
546
在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
443
547
548
+ ## 3 去除列表中的重复元素
549
+
550
+ 用集合
551
+
552
+ ``` python
553
+ list (set (l))
554
+ ```
555
+
556
+ 用字典
557
+
558
+ ``` python
559
+ l1 = [' b' ,' c' ,' d' ,' b' ,' c' ,' a' ,' a' ]
560
+ l2 = {}.fromkeys(l1).keys()
561
+ print l2
562
+ ```
563
+
564
+ 用字典并保持顺序
565
+
566
+ ``` python
567
+ l1 = [' b' ,' c' ,' d' ,' b' ,' c' ,' a' ,' a' ]
568
+ l2 = list (set (l1))
569
+ l2.sort(key = l1.index)
570
+ print l2
571
+ ```
572
+
573
+ 列表推导式
574
+
575
+ ``` python
576
+ l1 = [' b' ,' c' ,' d' ,' b' ,' c' ,' a' ,' a' ]
577
+ l2 = []
578
+ [l2.append(i) for i in l1 if not i in l2]
579
+ ```
580
+
581
+ 面试官提到的,先排序然后删除.
582
+
583
+ ## 4 链表成对调换
584
+
585
+ ` 1->2->3->4 ` 转换成` 2->1->4->3 ` .
586
+
587
+
588
+
589
+ ``` python
590
+ # Definition for singly-linked list.
591
+ # class ListNode:
592
+ # def __init__(self, x):
593
+ # self.val = x
594
+ # self.next = None
595
+
596
+ class Solution :
597
+ # @param a ListNode
598
+ # @return a ListNode
599
+ def swapPairs (self , head ):
600
+ if head != None and head.next != None :
601
+ next = head.next
602
+ head.next = self .swapPairs(next .next)
603
+ next .next = head
604
+ return next
605
+ return head
606
+ ```
444
607
445
608
446
609
0 commit comments