问题复盘
1.TCP和UDP的区别;网络中七层协议详细解释
2.cookie和session的区别------python中request的用法
3.cookie和session的生命周期
cookie的生命周期:
- 持久性cookie:如果创建时指定了过期时间('Expires'属性),cookie将被保存在客户端的硬盘中,直到达到过期时间。【即使浏览器关闭,这些cookie也会保留下来,直到他们过期或被用户手动删除】
- 会话性cookie:如果没有设置过期时间,Cookie 将是会话级别的,也就是说它只在当前会话期间有效。这种类型的Cookie存储在内存中,并在用户关闭浏览器时被删除。
Cookie的生命周期可以通过设置Expires
或Max-Age
属性来控制。Max-Age
属性定义了Cookie从创建开始存在的秒数。如果两者都未设置,Cookie将被视为会话性Cookie。
session的生命周期:
- 服务器端: Session数据存储在服务器上。Session的生命周期通常由服务器设置和配置控制。一般来说,Session会在用户的会话结束时失效,例如用户关闭了浏览器或者Session超时(由于长时间的不活动)。服务器上通常会有一个超时设置,确定了Session在多长时间的不活动后被销毁。这个超时时间可以在服务器的配置中设置
- 客户端 : 用户端的Session依赖于特殊的Session Cookie(通常是名为
JSESSIONID
的Cookie,至少在Java环境中是这样),该Cookie用于在服务器和客户端之间保持Session的唯一标识。这个Cookie通常是会话性的,意味着它仅在当前浏览器会话期间有效,并在浏览器关闭时被删除。
4.python中装饰器的理解 python中最常用的库有哪些? list和元组的区别?其他python基础题
装饰器是一种高级的语法,用于修改函数、方法或类的行为,而无需直接修改他们的定义。【个人理解:装饰器可以理解为一个包装函数,它接收一个函数作为参数,并返回一个新的函数,这个新函数通常会在原有函数基础上添加一些新的功能】------装饰器增强了代码的复用性和可读性 【例如:在金融项目中,使用Unittest中的parametrize()参数装饰器,传入读取数据的函数,然后根据传入的参数执行测试用例,可以减少代码的冗余性】
具体来说,装饰器的工作流程如下:
- 装饰器本质上是一个接收函数作为参数的函数(我们称之为装饰器函数)。
- 装饰器函数内部定义了另外一个函数(我们可以称之为包装函数),这个包装函数会调用原始函数,并在调用前后执行一些附加操作。
- 装饰器函数返回包装函数,这样原始函数的调用实际上就变成了包装函数的调用。
- 当装饰器应用到某个函数上时(通过在函数定义前使用
@装饰器名称
的语法),实际上是将该函数作为参数传递给了装饰器函数,并将返回的包装函数替换原始函数。
5.linux一些命令 管道、grep
grep 文本搜索,查找文件内容
bash
grep hello test.txt 在某个文件中,查找包含hello的内容,只要一行中有hello会把整行显示
grep -n hello test.txt n显示第几行找到的
grep -v hello test.txt v反向查找 查找不包含hello的内容行
grep -i hello test.txt i查找时不区分大小写
grep -n hello /home/admin -r 查找整个目录中的所有文件
6.通过管道 | 如果将当前目录下的文件名复制出来?
ls | xclip -selection clipboard
7.数据库中join的用法?
join是一种用于联合多个表的操作,以便根据他们之间的相关字段检索相关数据,join操作可以使得将多个表中的数据组合起来,以便在查询中获取更全面的结果
- inner join(内连接):返回匹配的两个表之间的关联条件的行,如果两个表中的行在关联条件上没有匹配项,则不会包含在结果集中。
- left join(左连接):返回左表中的所有行,并包括与右表匹配的行,如果右表中没有匹配项,则结果集中右表的所有列将包含 NULL 值。
- right join(右连接):返回右表中的所有行,并包括与左表匹配的行。如果左表中没有匹配项,则结果集中左表的所有列将包含 NULL 值。
- full join(全连接):返回左表和右表中的所有行,如果没有匹配的行,如果没有匹配的行,则结果集中的某些列将包含 NULL 值。
- cross join:返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合在一起。【暂时未接触过 记得复盘】
8.docker命令?
9.了解数据结构吗?常见的数据结构有哪些?栈用于哪些场景?.....
10.常见的二叉树有哪些?
11.红黑树的用途?
12.常见的设计模式?
13.手撕算法 传入数字,输出添加千分位的格式字符串
例如:input 1000 1000000
output 1,000 1,000,000
根据上述算法设计测试用例:
正向:
反向:
性能:
兼容性:
安全性:
算法题复盘
如何将int/long/double/char 转化为字符串【复习】
java
public class TC_test2 {
public static void main(String[] args) {
// 通用办法 String.valueOf() 可以将多数常用的数据类型转换为字符串
// 1.将int转换为字符串
int num = 100;
String str1 = Integer.toString(num);
System.out.println(str1);
// 2.将long 转化为字符串
long l1 =456579859;
String s1 = Long.toString(l1);
System.out.println(s1 );
String s2 = String.valueOf(l1);
System.out.println( s2);
// 3.将double转换为字符串
double d1 = 132.25;
String s3 = String.valueOf(d1);
System.out.println(s3);
// 4.将char 转换为字符串 也可使用String.valueOf()方法
// 5.将字符串转换为字符数组
String s5 = "ascgtgh";
char[] strArray = s5.toCharArray();
for (int i = 0; i < strArray.length; i++) {
System.out.print(strArray[i] + " ");
}
}
}
千位分隔符 例如输入1000 输出1,000
java
import java.text.DecimalFormat;
public class TC_Test1 {
public static void main(String[] args) {
long num = 1000323;
// 调用方法一
// System.out.println(method1(num));
// 调用方法二
System.out.println(method2(num));
}
// 方法一: 使用Java内置方法来实现千位分隔
public static String method1(double num){
// java.text.DecimalFormat; 类中提供了格式化的功能 其中"#,###"是格式化模式
// "#" 表示一个数字,"," 用作分组(千位)分隔符
DecimalFormat df = new DecimalFormat("#, ###");
// 使用format方法将数字格式化为带千位分隔符的字符串
String str = df.format(num);
return str;
}
// 方法二: 使用普通方法实现
public static String method2(long num){
// 将数字转换为字符串
String numStr = Long.toString(num);
// 创建字符串容器 用于存储最终结果
StringBuilder result = new StringBuilder();
int length = numStr.length();
// 从后往前遍历字符串
for (int i = length -1 ; i >= 0; i--) {
// 计算当前字符距离末尾的距离
int distanceEnd = length - 1 - i;
// 如果是3的倍数且不是第一个数字,就在当前位置前面加上逗号
if(distanceEnd > 0 && distanceEnd % 3 == 0){
result.insert(0, ",");
}
// 将当前数字添加到结果的开头
result.insert(0,numStr.charAt(i));
}
return result.toString();
}
}