初级工程师面经(Java)

1、静态变量没有赋值初始化默认为0
2、ArrayList<Object> arraylist=new ArrayList<String>();不行,泛型必须严格一致
3.redis 五种类型string hash list set 有序set
4.mybatis中${}和#{}区别,#可以防止注入
5.redis缓存击穿和缓存雪崩

缓存击穿: 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期)
这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。
1、设置热点数据永远不过期
2、接口限流与熔断、降级
3、加互斥锁,如果缓存失效的情况,只有拿到锁才可以查询数据库,降低了在同一时刻打在数据库上的请求,防止数据库打死。当然这样会导致系统的性能变差。

缓存雪崩:是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。
和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
1.设置过期时间随机,防止同一时间大量数据过期
2.分布式部署,均匀分布,提高数据库容灾。
3.搭建集群

缓存穿透:指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。
这时的用户很可能是攻击者,攻击会导致数据库压力过大。
1.接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;
2.从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击
3.使用布隆过滤器,布隆过滤器存有所有的Key,不在就一定不在。布隆能查到,不一定有。

布隆过滤器:计算key的hash值(多套哈希函数)映射数组下标,数组为二进制数组。一个数据可能映射多个位置。
1可能造成误判
2很难删除操作
可以设置误判率

死锁:循环等待,请求保持,互斥,不剥夺

6.spring事务传播特性
1.当前事务有的话加入,没有新建
2.支持当前事务,没有的话以非事务运行
3.支持当前事务,没有的话异常
4.新建事务,挂起当前事务
5.以非事务运行,挂起当前事务
6.以非事务运行,当前事务存在则异常
7.嵌套事务
spring事务隔离级别:
1.读未提交
2.读提交
3.可重复读
4.序列化

8.数据库四个原则 ACID:原子性,一致性,隔离性,持久性
9.数据库三大范式:第一范式:列不可再分 第二范式:属性完全依赖于主键 第三范式:属性不依赖于其它非主属性    属性直接依赖于主键
10.随机查询一列数据 SELECT * FROM table_name ORDER BY RAND() LIMIT 1;
11.SQL是结构化查询语言
12.联表查询On后面就加一个条件,别加多个条件, on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
13.count(*)包括了所有的列,相当于行数,在统计结果的时候, 不会忽略列值为NULL  
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候, 不会忽略列值为NULL  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数, 即某个字段值为NULL时,不统计。
14.数据库Between包含上下边界值
15.InnoDB只有聚簇索引(Clustered Index)与普通索引(Secondary Index),聚簇索引得是主键,所以非主键用普通索引。
 索引类型分类:
①主索引:主索引是一种只能在数据库表中建立不能在自由表中建立的索引。在指定的字段或表达式中,主索引的关键字绝对不允许有重复值。
②候选索引:和主索引类似,它的值也不允许在指定的字段或表达式中重复。一个表中可以有多个候选索引。
③唯一索引:唯一索引允许关键字取重复的值。当有重复值出现时,索引文件只保存重复值的第1次出现。提供唯一索引主要是为了兼容早期的版本。
④普通索引:普通索引允许关键字段有相同值。在一对多关系的多方,可以使用普通索引。
16.
DDL(Data Definition Language): 数据定义语言
用来定义数据库对象:数据库,表,列等。 关键字:create,drop, alter等。
DML(Data Manipulation Language): 数据操作语言
用来对数据库中的表进行增删改操作。 关键字:insert,delete,update等。
DQL(Data Query Language): 数据查询语言
用来查询数据库中表的记录(数据)。 关键字:select, where等
DCL(Data Control Language): 数据控制语言
用来定义数据库的访问控制权限和安全级别,及创建用户。关键字: grant, revoke等
17.快速排序,quicksort(int low,int high,int[] array) 选择基准元素,base为基准元素,i递增查找左边比base大的数,j递减查找右边比基准元素小的数组,然后递归
18. 冒泡排序,交换,传入array
19.选择排序,选择最小的或者最大的,放在一边,每次循环找到小的索引,交换位置。传入array
20.插入排序:从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置
    //插入排序,第二个和第一个比,小的在前面,然后依次循环前面的,找到当前元素位置插入。
21.希尔排序,插入排序多个gap,gap为length/2,然后每次/2,里面为插入排序
22.归并排序
23.tcp三次握手 1、客户端发送syn(k)请求建立连接 2、服务端收到后回复ack(k+1),并发送syn(j)同意建立连接 3、客户端收到ack(k+1)建立连接,回复syn(j+1)
24.抽象和接口的区别:
1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然

eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。
25.int(*p)[4];------p为指针变量指向含4个元素的一维整形数组(p是一个指针)int *p[4];-------定义指针数组p,该数组中有4个整形指针变量,(p是指针数组,其中有4个指针)

26.springboot项目实战,手写接口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值