In [1]: a = 3
In [2]: b = 3
In [3]: id(a)
Out[3]: 4494963920
In [4]: id(b)
Out[4]: 4494963920
不可变类型指的是数据不允许发生变化,如果改变变量的值就只能重新创建新的对象会重新分配内存地址,所以它的id将会有所改变。
In [5]: a = 4
In [6]: id(a)
Out[6]: 4494963952
可变类型:列表list和字典dict
也就是说如果对变量进行append、 +=等操作它只会改变变量的值,不会改变内存地址。对于相同值的不同对象也会占用不同的内存地址。
In [7]: a = [1,2]
In [8]: id(a)
Out[8]: 4530984192
In [9]: b=[1,2]
In [10]: id(b)
Out[10]: 4530973424
In [13]: b.append(3)
In [14]: b
Out[14]: [1, 2, 3]
In [15]: id(b)
Out[15]: 4530973424
In [1]: s = "ajldjlajfdljfddd"
In [2]: s = set(s)
In [4]: s = list(s)
In [5]: s.sort(reverse=False)
In [6]: res = "".join(s)
In [7]: res
Out[7]: 'adfjl'
In [8]: sums = lambda a,b:a*b
In [9]: sums(1,2)
Out[9]: 2
In [10]: dic={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
In [12]: lis = sorted(dic.items(), key=lambda i:i[0], reverse=False)
In [13]: lis
Out[13]: [('age', 18), ('city', '深圳'), ('name', 'zs'), ('tel', '1362626627')]
In [15]: dict(lis)
Out[15]: {'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}
In [1]: from collections import Counter
In [2]: a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
In [3]: res = Counter(a)
In [4]: res
Out[4]:
Counter({'k': 1,
'j': 3,
'a': 4,
'l': 9,
'f': 5,
';': 6,
'd': 3,
's': 2,
'h': 6,
'g': 1,
'b': 1})
In [4]: import re
In [5]: a = "not 404 found 张三 99 深圳"
In [6]: l = a.split(" ")
In [7]: res = re.findall('\d+|[A-Za-z]+',a)
In [8]: for i in res:
...: if i in l:
...: l.remove(i)
In [10]: print(" ".join(l))
张三 深圳
In [1]: a = [1,2,3,4,5,6,7,8,9,10]
In [2]: def fl(a):
...: return a%2 == 1
...:
In [3]: newlist = filter(fl,a )
In [5]: newlist = [i for i in newlist]
In [6]: newlist
Out[6]: [1, 3, 5, 7, 9]
res = [i for i in a if i%2==1]
正则re.complie作用
re.compile是将正则表达式编译成一个对象,加快速度,并重复使用
a=(1,)b=(1),c=(“1”) 分别是什么类型的数据?
分别是:tuple, int, str
两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,5,6,7,8,9]
In [18]: a.extend(b)
In [19]: a
Out[19]: [1, 5, 7, 9, 2, 2, 6, 8]
In [21]: a.sort(reverse=False)
In [22]: a
Out[22]: [1, 2, 2, 5, 6, 7, 8, 9]
用python删除文件和用linux命令删除文件方法
python: os.remvoe(file)
linux: rm file
log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”
In [23]: import datetime
In [28]: a = str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
In [29]: a
Out[29]: '2020-05-04 23:02:46'
数据库优化查询方法
索引:
使用中间表,外链:
请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行
matplotlib
写一段自定义异常代码
In [30]: def fn():
...: try:
...: for i in range(5):
...: if i > 2:
...: raise Exception("大于2")
...: except Exception as ret:
...: print(ret)
...:
In [31]: fn()
大于2
(.*)
和(.*?)
匹配区别?In [32]: s="<a>标签1</a><a>标签2</a>"
In [35]: res1 = re.findall("<a>(.*)</a>",s)
In [37]: res1
Out[37]: ['标签1</a><a>标签2']
非贪婪匹配:
In [32]: s="<a>标签1</a><a>标签2</a>"
In [35]: res1 = re.findall("<a>(.*?)</a>",s)
In [37]: res1
Out[37]: ['标签1', '标签2']
简述Django的orm
简单来说就是ORM相当于是面向对象的数据库语句,它的函数封装了mysql,oracle常用的增删改查功能,比如save
就是数据库的insert或者update,getallObject就是select语句。
在Django中每个model映射为一个数据表,model中的每个属性都代表着数据表中的字段。
[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
In [49]: x = [j for i in a for j in i]
In [50]: x
Out[50]: [1, 2, 3, 4, 5,]
In [51]: x = "abc"
In [53]: y="def"
In [54]: z=["d","e","f"]
In [55]: m = x.join(y)
In [56]: n = x.join(z)
In [57]: m
Out[57]: 'dabceabcf'
In [58]: n
Out[58]: 'dabceabcf'
join与os.path.join的区别:
join会将前x以分隔符的方式放入后者
举例说明异常模块中try except else finally的相关意义
python中交换两个数值
In [59]: a,b=3,4
In [60]: a,b=b,a
In [61]: a
Out[61]: 4
In [62]: b
Out[62]: 3
In [1]: a = [1,2]
In [2]: b=[3,4]
In [3]: res = [i for i in zip(a,b)]
In [4]: res
Out[4]: [(1, 3), (2, 4)]
In [5]: a="ab"
In [6]: b
Out[6]: [3, 4]
In [7]: b="xyz"
In [8]: res=[i for i in zip(a,b)]
In [9]: res
Out[9]: [('a', 'x'), ('b', 'y')]
In [1]: a = "张明 50分"
In [2]: import re
In [3]: res=re.sub(r'\d+',"100",a)
In [4]: res
Out[4]: '张明 100分'
show databases;
show tables;
desc 表名;
select * from 表名;
delete from 表名 where id=5;
update students set gender=0,hometown="北京" where id=5
a="hello"和b="你好"编码成bytes类型
[1,2,3]+[4,5,6]的结果是多少?
等价于extend
[1,2,3,4,5,6]
res = re.findall(r'dateRange=(.*?)%7C(.*?)&',url)
In [12]: res
Out[12]: [('2018-03-20', '2018-03-20')]
def quicksort(list):
if len(list) < 2:
return list
pivot = list[0]
less = [i for i in list[1:] if i <= pivot]
greater = [i for i in list[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
列出常见的状态码和意义
200 请求正常
404 找不到资源
500 服务器故障
403 请求资源被拒绝
后端优化
In [1]: dic={"name":"zs","age":18}
In [2]: dic.pop("name")
Out[2]: 'zs'
In [3]: dic
Out[3]: {'age': 18}
In [4]: del dic["age"]
In [5]: dic
Out[5]: {}
列出常见MYSQL数据存储引擎
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
Redis与MySQL的区别
Redis:
简述同源策略
协议相同
端口相同
域名相同
只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”
简述cookie和session的区别
深拷贝
不仅拷贝对象,对象中的元素(除了不可变元素)都会被拷贝
特殊情况
如果深拷贝对象是元组,
a.strip()
In [46]: a = sorted(foo, reverse=False)
In [65]: a = sorted(foo, key=lambda x:(x<0, abs(x)))
小于0的按照绝对值大小进行排序
foo = [{“name”:“zs”,“age”:19},{“name”:“ll”,“age”:54},
{“name”:“wa”,“age”:17},{“name”:“df”,“age”:23}]
In [70]: f = sorted(foo, key=lambda x:x["age"])
In [79]: s = sorted(dic.items(), key=lambda x:x[0])
Out[80]: [('city', 'beijing'), ('name', 'zs'), ('sex', 'man')]
sql预编译,
String sql = "select id, no from user where id=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);
ps.executeQuery();
参数校验:
不能带有特殊符号等格式问题,一般限制邮箱,手机号形式
In [16]: res = re.split(r':|\s',s)
re.match("\w+@163.com$",str)
def sums(num):
if num > 0:
res = num + sums(num-1)
else:
res = 0
return res
print(sums(10))
MyISAM不支持事务,InnoDB支持事务,这也是MySQL默认引擎为InnoDB的最大原因
InnoDB支持外键
MyISAM支持全文本搜索,InnoDB不支持
MyISAM表保存成文件形式,跨平台使用更加方便
MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyISAM
InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB