3.14 CVTE 线下笔试复盘(web后端-java)
CVTE 线下笔试复盘
归个人复盘记录,内容不一定完全正确,如果有错误还请帮忙指出
选择题:15
代码编程:1
场景设计:1
选择题:
ArrayList与Vector:
底层是否实现List接口,两者是否都线程安全,两者是否都是动态数组
解答:
ArrayList,LinkedList和 Vector 都实现了 List 接口,但是ArrayList 和 Vector 底层是动态数组,LinkedList 底层是双向链表
ArrayList 和 Vector 的区别在于,后者中的方法都加了(synchronized)关键字,为同步方法,所以Vector线程安全,而ArrayList线程不安全,相对的ArrayList的执行效率要高于Vector ;ArrayList 底层数组不够时,每次扩展在原基础上扩展0.5倍,Vector 扩展 1 倍
反射:
反射能获取私有属性吗,反射是否破坏了类的封装,反射可以大量使用吗
解答:
反射性能低,且相对不安全,不大量使用
反射类中的三个包
- Constructor:代表单个构造方法
- Method:代表类中在单个方法
- Field:代表单个属性
- AccessibieObject:以上三类在父类,提供了对应的访问控制的能力
反射确实可以获取类的私有属性或私有方法,破坏了类的封装性
JDK动态代理和 CGLIB动态代理
JDK默认代理是哪个,谁是反射实现的
解答:
JDK动态代理是通过反射实现的,而CGBIL动态代理是通过继承目标类来实现的
JDK动态代理是Java自带的库,不需要额外的依赖,而CGBIL动态代理需要依赖cglib库
死锁的必要条件是否有:
抢占,占有并等待,死锁,循环等待
解答:
死锁必要条件:独占,持有并等待,资源互斥,没有掠夺策略或抢占策略
泛型有什么特点:
可以避免强制转换?一定要强制转换?在类运行的时候泛型能发挥作用?
解答:
需要强制转换(泛型没深入了解的后果)
脏读会发生在哪些安全下:
Read Uncommitted,Read Committed,Repeatable Read,Serializable
解答:
Read Uncommitted读未提交会出现脏读,脏读就是读到了没写入数据库的中间数据,比如A要在业务中被改为B再改为C,最后将C写进数据库,可是因为读未提交,直接那B来用,就产生了错误
哪些是稳定的排序:
解答:
稳定:冒泡,插入,归并
不稳定:希尔,选择,快速,计数,基数,桶排
TCP/IP 的网络接口层是 OSI 模型的哪层
解答:
物理层和部分数据链路层
已知某网址的IP(192.50.12.129)和子网掩码(255.255.255.0),它的主机号是?
解答:
129
算法题:
(简化)给一个数组,只包含0 和1 ,设计一个算法,使得0都在左边,1都在右边,返回交换 0和1 的最小交换数
例子:
输入:{ 0 ,1} 返回 0 · 输入:{ 1 ,0} 返回 1 输入:{1, 1 ,0} 返回 1
解答:
设计双箭头一前一后移动,前遇1停止,后遇0停止,交换计数,再次移动,直到相遇
设计题:
用户常常会更改物料的信息,设计一个方案使得下游使用信息的系统能够同步获得上游更改的信息
解答:
利用乐观锁版本检验数据是否是最新版,用户在修改前获取一次,在修改后判断是否有变化,有就重新提交新修改,没有就正常提交后版本+1
下游利用AOP切面拦截请求信息,在每次请求前都检查一次数据是否是最新的
PS:说实话我感觉自己设计题答非所问了,但一下确实没想到什么方法,算法题一下也没思考边界问题,属于是自己功底还是浅薄了;选择题中还涉及了一些AOP,Socket,和动态路由,不过印象不深了
