120
120
- [ 系统编程] ( #系统编程 )
121
121
- [ 106.进程总结] ( #106进程总结 )
122
122
- [ 107.谈谈你对多进程,多线程,以及协程的理解,项目是否用?] ( #107谈谈你对多进程多线程以及协程的理解项目是否用 )
123
- - [ 108.Python异步使用场景有那些 ?] ( #108python异步使用场景有那些 )
123
+ - [ 108.Python异常使用场景有那些 ?] ( #108python异常使用场景有那些 )
124
124
- [ 109.多线程共同操作同一个数据互斥锁同步?] ( #109多线程共同操作同一个数据互斥锁同步 )
125
125
- [ 110.什么是多线程竞争?] ( #110什么是多线程竞争 )
126
126
- [ 111.请介绍一下Python的线程同步?] ( #111请介绍一下python的线程同步 )
271
271
- [ 244.怎么在海量数据中找出重复次数最多的一个?] ( #244怎么在海量数据中找出重复次数最多的一个 )
272
272
- [ 245.判断数据是否在大量数据中] ( #245判断数据是否在大量数据中 )
273
273
274
+
275
+
274
276
<!-- /TOC -->
277
+
275
278
# Python基础
276
279
## 文件操作
277
280
### 1.有一个jsonline格式的文件file.txt大小约为10K
@@ -440,8 +443,6 @@ c. Python2里面继承object的是新式类,没有写父类的是经典类
440
443
441
444
d. 经典类目前在Python里基本没有应用
442
445
443
- e.经典类的MRO是深度优先搜索,新式类的MRO是广度优先搜索
444
-
445
446
### 16.python中内置的数据结构有几种?
446
447
a. 整型 int、 长整型 long、浮点型 float、 复数 complex
447
448
@@ -743,26 +744,33 @@ def atoi(s):
743
744
return reduce (lambda num , v : num * 10 + ord (v) - ord (' 0' ), s, 0 )
744
745
```
745
746
### 29.Given an array of integers
746
- 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 ` nums = [2, 7, 11, 15]` , ` target=9 ` 因为 ` nums[0] + nums[1] = 2 + 7 = 9 ` ,所以返回 ` [0, 1] `
747
+ 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定nums = [ 2,7, 11,15] , target=9 因为 nums[ 0] + nums[ 1] = 2+ 7 =9 ,所以返回[ 0,1 ]
747
748
``` python
748
- from typing import List
749
-
750
- def two_sum (nums : List[int ], target : int ) -> List[int ]:
751
- s = {}
752
- for i, n in enumerate (nums):
753
- if (target- n) in s:
754
- return [s[target- n], i]
755
- else :
756
- s[n] = i
757
-
758
- nums = [2 , 7 , 11 , 15 ]
749
+ class Solution :
750
+ def twoSum (self ,nums ,target ):
751
+ """
752
+ :type nums: List[int]
753
+ :type target: int
754
+ :rtype: List[int]
755
+ """
756
+ d = {}
757
+ size = 0
758
+ while size < len (nums):
759
+ if target- nums[size] in d:
760
+ if d[target- nums[size]] < size:
761
+ return [d[target- nums[size]],size]
762
+ else :
763
+ d[nums[size]] = size
764
+ size = size + 1
765
+ solution = Solution()
766
+ list = [2 ,7 ,11 ,15 ]
759
767
target = 9
760
- result = two_sum(list_, target)
761
- print (result) # [0, 1]
768
+ nums = solution.twoSum( list , target)
769
+ print (nums)
762
770
```
763
- 给列表中的字典排序:假设有如下 list 对象, ` alist = [{"name": "a", "age": 20}, {"name": "b", "age": 30}, {"name": "c", "age": 25}] ` , 将alist中的元素按照 age 从大到小排序 ` alist_sort = [{"name": "b", "age": 30}, {"name": "c", "age": 25}, {"name": "a", "age": 20}] `
771
+ 给列表中的字典排序:假设有如下list对象, alist= [ {"name":"a","age":20},{"name":"b","age":30},{"name":"c","age":25}] ,将alist中的元素按照age从大到小排序 alist= [ {"name":"a", "age":20}, {"name":"b", "age":30}, {"name":"c", "age":25} ]
764
772
``` python
765
- alist_sort = sorted (alist, key = lambda e : e.get( " age" ), reverse = True )
773
+ alist_sort = sorted (alist,key = lambda e : e.__getitem__ ( ' age' ), reverse = True )
766
774
```
767
775
768
776
### 30.python代码实现删除一个list里面的重复元素
@@ -1035,8 +1043,32 @@ class Array:
1035
1043
### 45.介绍Cython,Pypy Cpython Numba各有什么缺点
1036
1044
Cython
1037
1045
### 46.请描述抽象类和接口类的区别和联系
1046
+
1047
+ 1.抽象类: 规定了一系列的方法,并规定了必须由继承类实现的方法。由于有抽象方法的存在,所以抽象类不能实例化。可以将抽象类理解为毛坯房,门窗,墙面的样式由你自己来定,所以抽象类与作为基类的普通类的区别在于约束性更强
1048
+
1049
+ 2.接口类:与抽象类很相似,表现在接口中定义的方法,必须由引用类实现,但他与抽象类的根本区别在于用途:与不同个体间沟通的规则,你要进宿舍需要有钥匙,这个钥匙就是你与宿舍的接口,你的舍友也有这个接口,所以他也能进入宿舍,你用手机通话,那么手机就是你与他人交流的接口
1050
+
1051
+ 3.区别和关联:
1052
+
1053
+ 1.接口是抽象类的变体,接口中所有的方法都是抽象的,而抽象类中可以有非抽象方法,抽象类是声明方法的存在而不去实现它的类
1054
+
1055
+ 2.接口可以继承,抽象类不行
1056
+
1057
+ 3.接口定义方法,没有实现的代码,而抽象类可以实现部分方法
1058
+
1059
+ 4.接口中基本数据类型为static而抽象类不是
1060
+
1038
1061
### 47.Python中如何动态获取和设置对象的属性?
1039
1062
1063
+ ``` python
1064
+ if hasattr (Parent, ' x' ):
1065
+ print (getattr (Parent, ' x' ))
1066
+ setattr (Parent, ' x' ,3 )
1067
+ print (getattr (Parent,' x' ))
1068
+ ```
1069
+
1070
+
1071
+
1040
1072
## 内存管理与垃圾回收机制
1041
1073
### 48.哪些操作会导致Python内存溢出,怎么处理?
1042
1074
### 49.关于Python内存管理,下列说法错误的是 B
@@ -1548,18 +1580,7 @@ class MyCls(object):
1548
1580
1549
1581
## 正则表达式
1550
1582
### 94.请写出一段代码用正则匹配出ip?
1551
- ``` python
1552
- def ip_match (ip_str ):
1553
- partterns = re.compile(r " ( 2( 5[0-5 ]{1} | [0-4 ]\d {1} ) | [0-1 ]? \d {1,2} ) ( \. ( 2( 5[0-5 ]{1} | [0-4 ]\d {1} ) | [0-1 ]? \d {1,2} )) {3} " )
1554
- print (partterns.search(ip_str).group(0 ))
1555
- ```
1556
1583
### 95.a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?
1557
- ``` python
1558
- def remove_b (test_str ):
1559
- res = re.compile(' (?<=a).*?(?=c)' )
1560
- ret = res.sub(" b" ,test_str)
1561
- print (ret)
1562
- ```
1563
1584
### 96.Python字符串查找和替换?
1564
1585
### 97.用Python匹配HTML g tag的时候,<.> 和 <.* ?> 有什么区别
1565
1586
### 98.正则表达式贪婪与非贪婪模式的区别?
@@ -1571,56 +1592,6 @@ def remove_b(test_str):
1571
1592
### 104.请写出匹配ip的Python正则表达式
1572
1593
### 105.Python里match与search的区别?
1573
1594
1574
- match 方法用于查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:
1575
-
1576
- ``` python
1577
- match (string[, pos[, endpos]])
1578
- 其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。因此,** 当你不指定 pos 和 endpos 时,match 方法默认匹配字符串的头部** 。
1579
- 当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None 。
1580
- >> > import re
1581
- >> > pattern = re.compile(r ' \d + ' ) # 用于匹配至少一个数字
1582
- >> > m = pattern.match(' one12twothree34four' ) # 查找头部,没有匹配
1583
- >> > print m
1584
- None
1585
- >> > m = pattern.match(' one12twothree34four' , 2 , 10 ) # 从'e'的位置开始匹配,没有匹配
1586
- >> > print m
1587
- None
1588
- >> > m = pattern.match(' one12twothree34four' , 3 , 10 ) # 从'1'的位置开始匹配,正好匹配
1589
- >> > print m # 返回一个 Match 对象
1590
- < _sre.SRE_Match object at 0x 10a42aac0>
1591
- >> > m.group(0 ) # 可省略 0
1592
- ' 12'
1593
- >> > m.start(0 ) # 可省略 0
1594
- 3
1595
- >> > m.end(0 ) # 可省略 0
1596
- 5
1597
- >> > m.span(0 ) # 可省略 0
1598
- (3 , 5 )
1599
- ```
1600
- ## search 方法
1601
-
1602
- search 方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:
1603
- search(string[ , pos[ , endpos]] )
1604
- 其中,string 是待匹配的字符串,pos 和 endpos 是可选参数,指定字符串的起始和终点位置,默认值分别是 0 和 len (字符串长度)。
1605
-
1606
- 当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
1607
- ``` python
1608
- >> > import re
1609
- >> > pattern = re.compile(' \d+' )
1610
- >> > m = pattern.search(' one12twothree34four' ) # 这里如果使用 match 方法则不匹配
1611
- >> > m
1612
- < _sre.SRE_Match object at 0x 10cc03ac0>
1613
- >> > m.group()
1614
- ' 12'
1615
- >> > m = pattern.search(' one12twothree34four' , 10 , 30 ) # 指定字符串区间
1616
- >> > m
1617
- < _sre.SRE_Match object at 0x 10cc03b28>
1618
- >> > m.group()
1619
- ' 34'
1620
- >> > m.span()
1621
- (13 , 15 )
1622
- ```
1623
-
1624
1595
## 系统编程
1625
1596
### 106.进程总结
1626
1597
进程:程序运行在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。
@@ -2447,49 +2418,6 @@ redis检查内存使用情况,如果大于maxmemory的限制,则根据设定
2447
2418
2448
2419
## 数据结构
2449
2420
### 222.数组中出现次数超过一半的数字-Python版
2450
-
2451
- #### 方法一
2452
-
2453
- ``` python
2454
- def majority_element (nums ):
2455
- nums.sort()
2456
- return nums[len (nums) // 2 ]
2457
- ```
2458
-
2459
- #### 方法二
2460
-
2461
- ``` python
2462
- from functools import reduce
2463
-
2464
-
2465
- def majority_element (nums ):
2466
- return reduce (lambda n , x : (n[0 ], n[1 ] + 1 ) if n[0 ] == x else ((x, 1 ) if n[1 ] - 1 < 0 else (n[0 ], n[1 ] - 1 )), nums, (None , - 1 ))[0 ]
2467
- ```
2468
-
2469
- #### 方法三
2470
-
2471
- ``` python
2472
- from collections import Counter
2473
-
2474
-
2475
- def majority_element (nums ):
2476
- return Counter(nums).most_common(1 )[0 ][0 ]
2477
- ```
2478
-
2479
- #### 方法四
2480
-
2481
- ``` python
2482
- from random import choice
2483
-
2484
-
2485
- def majority_element (nums ):
2486
- length = len (nums) // 2
2487
- while True :
2488
- n = choice(nums)
2489
- if nums.count(n) > length:
2490
- return n
2491
- ```
2492
-
2493
2421
### 223.求100以内的质数
2494
2422
### 224.无重复字符的最长子串-Python实现
2495
2423
### 225.通过2个5/6升得水壶从池塘得到3升水
0 commit comments