面试6月4号

面试笔记-某游戏公司

数据库逻辑外键和不使用逻辑外键的区别

https://blog.csdn.net/qq_18863573/article/details/83781629

mysql的隔离级别,默认的是

https://www.cnblogs.com/shoshana-kong/p/10516404.html

读未提交,读已提交,可重复读,串行化。默认的是可重复读

为什么默认的是可重复读

历史原因,因为在5.0之前,主从复制是基于binlog实现的,binlog只支持一种格式,也就是statement。
statement记录的是修改SQL语句
row:记录的是每行实际数据的变更
mixed:statement和row模式的混合
那么这个时候可能会出现问题。因为statement是基于sql生成的,所以只会在commit的时候记录sql语句。那么就有可能出现,记录的语句顺序和实际执行的顺序不一致,从而导致从机更新数据的时候数据不一致。
解决这个问题就是1.使用“可重复读RR”,引入间隙锁的概念,锁住部分行;2.将binlog设置为row模式,这个时候就不会有顺序不一致的问题了。

为什么公司用的是读已提交

1.历史原因了解了,使用row就可以解决问题;
2.使用RR可能会导致间隙锁,产生死锁的概率更高;
3.使用RR在索引失效的情况下,会使用表锁锁住整张表,效率很低。
4.RC的并发性更好,使用了一个semi-consistent read功能,锁冲突的时候可以判断是否能重新获取锁,而RR只能傻等。
https://blog.csdn.net/JackCaptain1015/article/details/93568371

反射的应用场景

1.反射实现深拷贝工具类;
2.反射实现日志注解;
3.Aop、Ioc用了反射;
4.优化工厂模式;
(这四个都是面试官不想听的,太简单了,他还想听其他的,但是我无了)
https://blog.csdn.net/jinwufeiyang/article/details/80115119

拦截器的实现和使用场景

// todo 单独写一篇吧,太大了。拦截器,监听器,过滤器的实现和使用场景

深拷贝浅拷贝的区别和使用场景,如何实现

实现就是1.通过反射;2.通过序列化和反序列化。
使用场景:redis出来的就是一个深拷贝。

多线程sync和voli的区别

虚拟机提供的轻量级保证。
不会对读取或是写入时加锁。不是线程安全的。
适合于只有一个线程写,多个线程读的场景,因为它只能确保可见性。不能保证原子性。
尽量不使用符合操作“a=a+1”。使用get(),set()方法。
private volatile int a = 0;
//todo 单独写几篇JUC部分,内容太多了

thread和另外两种创建线程的方式有何区别

避免了java中单继承的局限性

int有多少位

32

http的各种错误码

200:正确的请求返回正确的结果,如果不想细分正确的请求结果都可以直接返回200
301:请求成功,但是资源被永久转移。比如说,我们下载的东西不在这个地址需要去到新的地址。
400:请求出现错误,比如请求头不对等。
401:没有提供认证信息。请求的时候没有带上 Token 等。
403:请求的资源不允许访问。就是说没有权限。
404:请求的内容不存在。
500:服务器错误。
505:请求的 HTTP 版本不支持。
4开头的都是被服务器拦截了,请求错误
3开头的和地址有关,重定向
5开头的就是到服务层了,服务错误
https://www.cnblogs.com/xiaodai0/p/9811639.html

tcp,为什么用tcp不用http,使用场景

http是建立在tcp之上的应用。
socket是支持TCP/IP协议的网络通信的基本操作单元。
socket适用场景:网络游戏,银行交互,支付。
http适用场景:公司OA服务,互联网服务。
https://www.cnblogs.com/baizhanshi/p/8482612.html

用线程池遇到的坑

// todo 单独写在JUC里面

springboot如何处理异常

https://www.cnblogs.com/xuwujing/p/10933082.html

ArrayList的扩容机制,HashMap的扩容机制和扩容因子,初始长度

ArrayList是1.5倍+1,初始长度是10
Vector是2倍,初始长度是10
HashMap是2倍,初始长度是16,扩容因子0.75
HashTable是2倍+1,初始长度是11

map是如何确定位置的

高16 bit 不变,低16 bit 和高16 bit 做了一个异或(得到的 hashcode 转化为32位二进制,前16位和后16位低16 bit和高16 bit做了一个异或)
(n·1) & hash = -> 得到下标

integer和int区别

1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。
4、Integer的默认值是null,int的默认值是0

mysql中乐观锁和悲观锁的应用

todo在mysql文章内补充

java种两个date类型如何确定是同一天

参考https://blog.csdn.net/longzhongxiaoniao/article/details/86533014
使用Calendar对象,将date转成calendar对象,通过比较calendar对象的0、 1、6元素,来比较是不是同一天,同一个世纪同一年的第同一天
JAVA8已经有了并发安全的用来替代Calendar、date、SimpleDateFormat的类。
//todo 详见我的另外一篇文章,详细讨论时间相关类。。。

spring 事务注解的使用,事务的隔离级别,默认是?

默认是数据库的隔离级别。
todo 在spring分类中补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值