读文件,关文件
f = open('somefile.txt', 'rt')
# 打开一个文件
data = f.read() # 读取文件
f.close() # 关闭文件
# 使用with语句可以不用手动关闭文件
# 使用带有 rt 模式的 open() 函数读取文本文件。如下所示:
with open('somefile.txt', 'rt') as f:
data = f.read()
# Iterate over the lines of the file
with open('somefile.txt', 'rt') as f:
for line in f:
pass
# process line
# 类似的,为了写入一个文本文件,使用带有 wt 模式的 open() 函数, 如果之前文件内容存在则清除并覆盖掉。如下所示:
# Write chunks of text data
with open('somefile.txt', 'wt') as f:
f.write(text1)
f.write(text2)
...
# Redirected print statement
with open('somefile.txt', 'wt') as f:
print(line1, file=f)
print(line2, file=f)
...
# 如果是在已存在文件中添加内容,使用模式为 at 的 open() 函数。
算法,快排
def quick_sort(L):
return q_sort(L, 0, len(L) - 1)
def q_sort(L, left, right):
if left < right:
pivot = Partition(L, left, right)
q_sort(L, left, pivot - 1)
q_sort(L, pivot + 1, right)
return L
def Partition(L, left, right):
pivotkey = L[left]
while left < right:
while left < right and L[right] >= pivotkey:
right -= 1
L[left] = L[right]
while left < right and L[left] <= pivotkey:
left += 1
L[right] = L[left]
L[left] = pivotkey
return left
L = [5, 9, 1, 11, 6, 7, 2, 4]
print(quick_sort(L))
冒泡
def bubbleSort(arr):
for i in range(1, len(arr)):
for j in range(0, len(arr)-i):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
冒泡排序
装饰器
一个装饰器就是一个函数,它接受一个函数作为参数并返回一个新的函数。 当你像下面这样写:
@timethis
def countdown(n):
pass
跟像下面这样写其实效果是一样的:
def countdown(n):
pass
countdown = timethis(countdown)
字符串匹配(kmp)
单例模式
二分查找
def binarySearch (arr, l, r, x):
# 基本判断
if r >= l:
mid = int(l + (r - l)/2)
# 元素整好的中间位置
if arr[mid] == x:
return mid
# 元素小于中间位置的元素,只需要再比较左边的元素
elif arr[mid] > x:
return binarySearch(arr, l, mid-1, x)
# 元素大于中间位置的元素,只需要再比较右边的元素
else:
return binarySearch(arr, mid+1, r, x)
else:
# 不存在
return -1
# 测试数组
arr = [ 2, 3, 4, 10, 40 ]
x = 10
# 函数调用
result = binarySearch(arr, 0, len(arr)-1, x)
if result != -1:
print ("元素在数组中的索引为 %d" % result )
else:
print ("元素不在数组中")
redis持久化的两种方式(关系型和非关系型的区别)
Linux命令(查内存,服务器内存,查当前运行进程数,打开文件的五种方式)
日志排错
grep在文件文本里过滤错误
怎么在代码里生成日志
深浅拷贝,乐观锁,悲观锁
乐观锁
- 用数据版本(Version)记录机制实现,这是乐观锁最常用的一种实现方式。
- 何谓数据版本?即为数据增加一个版本标识,一般是通过为数据库表增加一个数字类型的 “version” 字段来实现。
- 当读取数据时,将version字段的值一同读出。
- 数据每更新一次,对此version值加1。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的version值进行比对,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据,不予更新。
- 这个版本号可以是数字,也可以是时间(精度只能到毫秒),也可以是一个唯一的字符串标识hash
- update tbl_name set filed=new_value where some_condition and version = versioin_value;
- 判断影响行数,判断是否执行成功,如果失败了重新取数据。
- 缺点:高并发场景下,CPU耗用高
- 即便我们是单条SQL:
- update tbl_name set value = 51 where id = {id};
- update tbl_name set value = value + 1 where id = {id};
悲观锁
- 悲观锁就是在操作数据时,认为此操作必然会出现数据冲突,所以提前为冲突做准备。
- 要使用悲观锁,我们必须关闭mysql数据库的自动提交属性,因为MySQL默认使用autocommit模式,我们可以使用命令设置MySQL为非autocommit模式:set autocommit = 0;
- 行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁。
- 行级锁的缺点是:由于需要请求大量的锁资源,所以速度慢,内存消耗大。
- 在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。
- 前面提到过,在InnoDB引擎中既支持行级锁也支持表级锁,那么什么时候会锁住整张表,什么时候或只锁住一行呢? 只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表级锁!
订单
二叉树遍历,
二叉树遍历单双链表,
单向链表包含两个域,一个是信息域,一个是指针域。也就是单向链表的节点被分成两部分,一部分是保存或显示关于节点的信息,第二部分存储下一个节点的地址,而最后一个节点则指向一个空值。
[图片上传失败...(image-8a1eae-1575031571114)]
爬楼梯(动态规划)
十级楼梯,每次只走一步或者两步,有几种走法
def dynamicProgram(n):
if n < 1:
return 0
if n == 1:
return 1
if n == 2:
return 2
a=1
b=2
temp=0
while i<=n:
temp = a+b
a,b = b,temp
return temp
dynamicProgram(10)
线程协程进程
进程是什么呢?
直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。
线程又是什么呢?
线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。
对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。
协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。
协程的开销远远小于线程的开销。
1、进程多与线程比较
线程是指进程内的一个执行单元,也是进程内的可调度实体。线程与进程的区别:
1) 地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间
2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
3) 线程是处理器调度的基本单位,但进程不是
4) 二者均可并发执行
5) 每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
2、协程多与线程进行比较
1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
2) 线程进程都是同步机制,而协程则是异步
3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
python可以通过 yield/send 的方式实现协程。在python 3.5以后,async/await 成为了更好的替代方案。
RSA、DSA
RSA 与 DSA 都是非对称加密算法。其中RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积);DSA 的安全性是基于整数有限域离散对数难题。基本上可以认为相同密钥长度的 RSA 算法与 DSA 算法安全性相当。
网友评论