很不错——篇


宝藏文档:https://www.cnblogs.com/xiaobaibailongma

1、编程篇

一、排序

复制代码
 1 ls=[3,2,5,1]
 2 # 方法一:
 3 def bubble(ls):
 4     for i in range(0,len(ls)):
 5         for j in range(i+1,len(ls)):
 6             if ls[i]>ls[j]:
 7                 ls[i],ls[j]=ls[j],ls[i]
 8     return ls
 9 # print(bubble(ls))
10 # 方法二:
11 print(sorted(ls,reverse=True))
复制代码

 二、求最大值、最小值

复制代码
1 ls=[3,2,5,1,5]
2 # 方法一
3 # print(max(ls))
4 # 方法二
5 max_val=0
6 for i in ls:
7     if i>max_val:
8         max_val=i
9 print(max_val)
复制代码

 三、去重

复制代码
1 ls=[3,2,3,5,1,5,5]
2 # 方法一:
3 # print(set(ls))
4 # 方法二:
5 ls2=[]
6 for i in ls:
7     if i not in ls2:
8         ls2.append(i)
9 print(ls2)
复制代码

 四、统计出现的次数

复制代码
1 ls=[3,2,3,5,1,5,5]
2 # 方法一:
3 d={}
4 for i in ls:
5     d[i]=ls.count(i)
6 print(d)
方法二:
ls2=list(set(ls))
for i in ls2:
ls.count(i)
复制代码

 五、倒序

 1 str="tom"
 2 str2=''
 3 c = list(str)
 4 # 方法一
 5.  print(d[::-1])
 6 # 方法二  7 for i in range(len(c)):  8 str2+=c.pop()  9 # 方法三 10 leng=len(str) 11 leng2=len(str)-1 12 for i in range(leng): 13 str2+=c[leng2-i]

 

 六、递归

复制代码
 1 p = r"D:\测试用例"
 2 
 3 import os
 4 def getFile(path):
 5     p = os.listdir(path)
 6     for i in p:
 7         f = os.path.join(path,i)
 8         if os.path.isdir(f):
 9             getFile(f)
10         else:
11             print(f)
12 getFile(p)
复制代码

七、装饰器

带参数的装饰器

复制代码
 1 def outer2(val):
 2     def outer(fun):
 3         def inner(*args,**kwargs):
 4             if val==1:
 5                 print("decoration1..")
 6             if val==2:
 7                 print("decoration2..")
 8             fun(*args,**kwargs)
 9         return inner
10     return outer
11 
12 @outer2(2)
13 def one():
14     print('ok...')
15 one()
复制代码

 八、字典排序

复制代码
 1 d = {"1":"tom","3":"Lily","2":"Jim"}
 2 # 方法一:
 3 c = sorted(d.items(),key=lambda x:x[0])
 4 # print(c)
 5 # 方法二:
 6 keys = [i for i in d.keys()]
 7 skeys = sorted(keys)
 8 vals=[]
 9 for i in skeys:
10   for k,v in d.items():
11     if i==k:
12       vals.append(v)
13 # cc = map(lambda x,y:{x:y},skeys,vals)
d={}
for i in range(len(ls)):
d[ls[i]]=ls2[i]
print(d)
 
复制代码

 九、最长的公共前缀

复制代码
 1 ls=["floght","floor","floy","flower"]
 2 min_lenght = len(ls[0]) 
 3 for i in ls:
 4   if min_lenght>len(i):
 5     min_lenght=len(i)
 6 ls2=[]
 7 str2=''
 8 for i in range(min_lenght):
 9   for u in ls:
10     ls2.append(u[i])
11     if ls2.count(u[i])==min_lenght:
12       str2+=u[i]
13   ls2=[]
14 print(str2)
复制代码

 

 十、递归求和

1 def get_sum(num):
2   if num<=1:
3     return 1
4   return num+get_sum(num-1)
5 print(get_sum(100))

十、递归树 

复制代码
 1 menu_items = [
 2     {'id': 1, 'name': '一级菜单', 'status': 1, 'parent_id': 0},
 3     {'id': 2, 'name': '二级菜单', 'status': 1, 'parent_id': 1},
 4     {'id': 3, 'name': '三级菜单', 'status': 1, 'parent_id': 2},
 5     # 其他菜单项...
 6 ]
 7 
 8 def build_menu(menu_items, parent_id=0):
 9     menu = []
10     for item in menu_items:
11         if item['parent_id'] == parent_id:
12             child_menu = build_menu(menu_items, item['id'])
13             cc = child_menu
14             menu.append({
15                 'name': item['name'],
16                 'child': child_menu
17             })
18     return menu
19 print(build_menu(menu_items))
复制代码

 

十一、找出连续的值

复制代码
ls=[1,2,3,5,6,8]
ls2=[]
ls3=[]
for i in ls:
  ls2.append(i)
  if i+1 not in ls:
    if ls2[0]==ls2[-1]:
      ls3.append(ls2[0])
    else:
      ls3.append([ls2[0],ls2[-1]])
    ls2=[]
print(ls3)
复制代码

 

 十二、LRU 算法

https://www.jb51.net/article/249285.htm?tdsourcetag=s_pcqq_aiomsg
https://www.jianshu.com/p/e41ec08e4aa6
复制代码
 1 from collections import OrderedDict
 2 class LRUCache:
 3     def __init__(self,size):
 4         self.size = size
 5         self.dic = OrderedDict()
 6     def set(self,key,val):
 7         if key in self.dic:
 8             self.dic.pop(key)
 9         if self.size == len(self.dic):
10             self.dic.popitem(last=False)
11         self.dic.update({key:val})
12     def get(self,key):
13         val = self.dic.get(key)
14         self.dic.pop(key)
15         self.dic.update({key: val})
16         return val
17 
18 r = LRUCache(3)
19 r.set("1", "1")
20 r.set("2", "2")
21 r.set("1", "3")
22 # r.set("1", "4")
23 # r.set("1", "5")
24 print(r.dic)
25 r.get("1")
26 print(r.dic)
27 # r.set("4", "4")
28 # print(r.dic)
复制代码

 from collections import OrderedDict

class LRUCache:
def __init__(self,size):
self.size = size
self.dic = OrderedDict()
def set(self,key,val):
if key in self.dic:
self.dic.pop(key)
if self.size == len(self.dic):
self.dic.popitem(last=False)
self.dic.update({key:val})
def get(self,key):
val = self.dic.get(key)
self.dic.pop(key)
self.dic.update({key: val})
return val

r = LRUCache(3)
r.set("1", "1")
r.set("2", "2")
r.set("1", "3")
# r.set("1", "4")
# r.set("1", "5")
print(r.dic)
r.get("1")
print(r.dic)
# r.set("4", "4")
# print(r.dic)

2、linux

1、展示所有upd\tcp

lsof -i

2、占用端口80

lsof -i:80

3、一行命令杀死占用端口80 的

lsof -i:80|awk '{print $2}'|xargs kill

4、一行命令杀死进程名称为python的

ps aux | grep python | awk '{print $2}' | xargs kill

5、查看100行到200行的日志

head -n 200 filname | tail -n 100

6、查看5行到6行的日志

head -n 6 filname | tail -n 1

7、查看后100行的含有关键字的日志

head -n 100 filname | grep "关键字"

8、查看一级目录文件大小,取前三

du -h --max-depth=1 | sort -hr | head -n 3 展示隐藏的文件

du -sh * 不展示隐藏文件

du -sh * | sort -hr | head -n 3

-s:不展示子文件大小,只展示一级目录大小

-h:文件大小展示的可读性

 

9、压测,服务器的内存使用情况

free -h 

 10、压缩

解压:tar -xvf file 

压缩:tar -cvf xx.tar file

11、grep 

grep -n ‘关键字’ file 显示行号

grep -r '关键字' files 递归文件夹搜索关键字

grep -i '关键字' file 忽略大小写

grep -v '关键字' 反向查

12、内存方面

查看系统整体CPU占用情况(查看系统整体负载情况)
w
15:33:44 up 10 days, 7:24, 18 users, load average: 4.72, 3.16, 2.77
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.66.44 09:38 7:04 42:42m 0.00s tmux a -t wql3

load average:平均负载值,依次是1分钟cpu活动数、5分钟cpu活动数、15分钟cpu活动数
w这个命令与uptime 相似
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 522159360 2063216 15877368 0 0 0 10 0 0 2 1 97 0 0

io中的bi,读磁盘所占的CPU;bo,写磁盘所占的CPU
cpu中的wa,是I/O等待占用的内存

动态监控资源占用情况
top
Tasks: 2667 total, 8 running, 1796 sleeping, 0 stopped, 16 zombie(僵尸)
%Cpu(s): 4.1 us, 0.2 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 79118905+total, 51437747+free, 25886304+used, 17948536 buff/cache
KiB Swap: 23449596 total, 23449596 free, 0 used. 52883257+avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
175832 kfin-st+ 20 0 1488616 420452 26228 S 68.6 0.1 5:56.89 celery

S:进程状态,S:interruptible sleep R:running D:uninterruptible sleep T:stoped Z:zombie

查询内存使用情况
free -g -t -s 5 (g是以G单位展示,t是汇总,s是秒,每5秒刷新一次)
total used free shared buff/cache available
Mem: 754 254 482 0 17 496
Swap: 22 0 22
Total: 776 254 505

iostat

(base) moli@Finance:~$ iostat

Linux 5.4.0-150-generic (Finance) 2024年12月24日 _x86_64_ (192 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle

           2.51    0.00    0.99    0.00    0.00   96.50

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

nvme0n1          16.59         3.63       280.25    4430710  342366388

sda              19.35        10.62       354.00   12971892  432464552

sdc              22.96        10.90       453.38   13320432  553870636

sdd              25.24        10.46       504.84   12777256  616738072

sdb              21.55        11.99       419.92   14648648  512998684

 查看cpu 核数:lscpu\cpuinfo

 磁盘方面

du :检查磁盘空间使用量

df:列出文件系统的整体磁盘使用量

 

3、sql

1、delete、truncate、drop 区别

delete 删除表内容,可以回滚

truncate 删除表内容,不可以回滚

drop 删除表结构 不可以回滚

 

2、mysql 的书写顺序

select * from tableA inner join tableB on tableA.id=tableB.id where id=12 group by name having id>2 order by id desc limit 2

 

3、mysql 的执行顺序

from on join where group by having select distict order by limit

 



4、测试用例

等价类、边界值、判定表

判定表的案例

 测试case 设计万能公式

1、功能,状态迁移

2、界面UI

3、性能,分库分表

4、易用性

5、兼容性

6、弱网络

7、中断

8、安装卸载,版本号测试


接口测试(思路:功能、性能、安全、兼容、弱网)
功能:入参,出参:入参数据的合法性,包括,数据的类型,int,string;选填必填;文件数据的长度、大小、类型;分页;排序;入数据校验、出参的正确性校验
性能:响应时间、并发
安全:html、js、敏感信息加密、鉴权
异常:中断、弱网、数据库故障、幂等
兼容:新老数据兼容
其他:单接口、串联接口

优惠券
功能:满减、打折;扣减为0为负;使用前后结果校验;小数点;过期;叠加使用;使用顺序
性能:弱网、幂等

输入框
功能:点击输入框下拉加载默认数据,按时间倒序;搜索历史数据;模糊(前、中、后)、精确搜索;输入内容的最小最大字符限制;分页;排序;无效搜索:特殊字符;为空搜索
性能:响应时间
安全:js注入%%、鉴权
兼容:浏览器、分辨率的兼容
异常:中断、弱网、鉴权、数据库故障

5、性能指标

吞吐量:单位时间内处理的请求数量:衡量网络的


tps:每秒处理事物的能力:衡量服务器的


CPU利用率,小于80


响应时间

6、性能测试,服务器关注的点

1、cpu

top 实时查看cpu占用情况;

free -h -t 物理内存、交换内存使用情况

 

2、cpu负载

w、uptime 可以检测cpu每1分钟、5分钟、15分钟的平均负载

 

3、磁盘

df -h 磁盘空间使用情况

 

4、磁盘IO

  • 磁盘读写速率、I/O 操作次数、磁盘利用率、平均队列长度、等待 I/O 的时间。

Iostat tps 每秒I/O 操作次数,每秒读多少kb,每秒写多少kb

iostat -dx 是IO分开的指标,每秒I操作次数,每秒O 操作次数;I的等待时间,O的等待时间;平均队列长度;磁盘利用率

 

大杂烩命令:vmstat

1、进程:r需要cpu运行的进程数;b被阻塞的进程数

2、内存:swpd 交换内存;free 物理内存;buff/cache 缓存

3、交换内存:si磁盘交换到内存的数量;so内存交换到磁盘的数量

4、io:读取与写入的数据块

5、system:in:每秒的中断数;cs:每秒的上下文切换次数

6、cpu:us:用户态 CPU 时间百分比;sy:系统态 CPU 时间百分比;id:空闲 CPU 时间百分比;wa:等待 I/O 的 CPU 时间百分比;st:被虚拟机偷走的 CPU 时间百分比

7、中间件

中间件

 



posted @ 2021-12-28 09:32  东方不败--Never  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示