领保科技二面
1.实习过程当中的收获(我回答了权限隔离现象),追问为什么会有权限隔离?
实习最主要给我带来的收获就是了解到了在真实生产环境当中是如何进行开发,需要初步对公司内部组件快速了解,跟同事进行合作分工了解清楚需求,还有需要提前沟通获取各种所需要的权限来完成开发任务。
权限隔离的本质就是维护数据,我们开发人员需要关心的是其数据结构而不需要关注实体数据。而运维等其他职位应该关注于数据的安全、存储等。(面试官根据我的总结进行的回答)
2.JAVA类的结构(没回答上来,我真的没关注过这个o(╥﹏╥)o)
成员变量、方法、构造方法、内部类、代码块
3.JAVA对封装思想具体实现的组件(只回答了封装的思想,没想到竟然都是平常使用的,看来我只会用Java而不知到背后的原理)
访问控制修饰符、Getter和Setter方法、构造器。通过这三种组件来控制访问对象属性的权限,来保护对象内部的安全性。
4.JUC是什么,会出现什么并发问题?
JUC的主要目的是提供并发与多线程工具,通过JUC我们可以提高系统的TPS(每秒处理事务的数量,事务可以理解为业务流程)。
5.下面伪代码线程安全吗,如果不安全有什么问题
Class A{
private volatile Integer age = 10;
void method(Integer userAge){
this.age = userAge
}
}
多线程情况下,通过volatile将age进行线程共享,但是age复合操作(读取-写入-修改)是线程不安全的(例如age进行加减操作)
但是对于this.age = userAge,赋值操作来说是线程安全的。
Class A{
void method(){
Lock lock = new ReentrantLock();
lock.lock();
//业务代码
lock.unlock();
}
}
错误点:Lock lock = new ReentrantLock()是一个局部变量,属于线程私有属性。对于线程私有属性,获取锁是没有意义的。需要修改为类的成员变量,private static final Lock lock;类的成员变量会放在方法区属于线程共享区,其他线程对该资源可见,可以实现互斥加锁。
优化点:lock.unlock()操作要放到finally代码块中,在释放锁时一定要放到finally模块里面,避免死锁。
#我的实习求职记录#