阿里-面经4

网路的七层模型?

   从上到下分别是:应用层,表示层,会话层,传输层,网络层,链路层,物理层

Http,Https区别?

    http协议运行与tcp上,发送端和接收端都无法确认对方的身份,https就是带有ssl的http协议,是添加了加密和认证机制的http协议。http的端口是80,https的端口是443,https需要购买证书

进程的通信机制?

   管道,消息队列,信号量,共享内存,套接字

死锁的4个条件?

扫描二维码关注公众号,回复: 10192806 查看本文章

    互斥条件,请求与保持条件,不可剥夺条件,循环等待条件

os层面如何解决死锁?

    死锁预防: 允许多个进程同时访问一个资源实例,禁止已持有资源的进程等待其他资源,申请的资源不能立即使用的话就释放

    死锁避免:利用额外的先验证信息,判断系统会不会出现死锁——银行家算法

    死锁检测与恢复:操作系统直接忽略死锁,由应用程序来处理死锁——鸵鸟算法

数据库的三大范式?

    1.数据库的列属性是不可分割的最小单元

    2.在第一范式的基础上,所有的列都要依赖主键

    3.在第二范式的基础上,所有的列除了依赖主键不能再依赖其他列

B+树如何进行查询,插入,删除?

    查询:从根节点开始,首先从节点内部进行二分查找,直到最后进入叶子节点,若叶子结点中存放该索引值,就能找到对应记录的指针,若不存在,则查找失败

   插入:首先找到所插入索引值所在的叶子结点及叶节点内对应的位置,拟插入,然后会检查叶子节点的合法性,假如不合法,那么叶子结点会进行分裂,分裂后的两个叶节点的最小索引值,将大的索引值插入到父节点,然后检查父节点的合法性,假如父节点不合法,会进行再分裂,一直重复这个过程直到合法,然后插入结束

   删除:首先拟删除该数据,如果不破坏B+树本身的性质,则直接删除。如果删除操作导致了节点的最大值或最小值改变,那么相应的改动父节点中的索引值,在删除数据后,如果导致节点中数据个数不足,那么要么向兄弟节点借数据,要么就直接和兄弟节点进行合并

AQS实现公平锁和非公平锁?

   公平锁:首先调用AQS的acquire方法,然后去回调tryAcquire方法,tryAcquire是这样实现的:

                  1.判断state是否为0,为0则说明可以获取

                  2.然后判断AQS队列中是否有等待的线程,没有的话则用CAS尝试获取,获取成功后将锁的持有线程修改为当前线程

                 3.假如是持有该锁的线程想再次获取锁,那么就会对state加1

                4.假如队列中有等待的线程,那么会将该线程也放入等待队列中

非公平锁:不需要判断AQS队列中是否有等待的线程,直接去发起获取锁的操作

                   1.判断state是否为0,为0则开始尝试通过CAS操作获取锁,不为0则直接返回false

                   2.假如是持有该锁的线程想再次持有锁,那么state+1

区别:非公平锁不需要判断AQS队列中是否有等待线程,是在获取锁失败的情况下再进入AQS队列中的,而公平锁假如AQS队列中有等待线程的话就会直接进入队列中

bean的生命周期?

  

1.通过BeanFactory或者ApplicationContext获取实例Bean

2.set属性注入

3.如果Bean实现BeanNameAware接口,则调用setBeanName(String name)方法设置Bean的name属性

4.如果Bean实现BeanFactoryAware接口,则调用setBeanFactory(BeanFactory beanFactory)方法,设置创建该Bean的工厂

5.如果有定义BeanPostProcessor接口,则调用该接口的postProcessBeforeInitialization(Object bean, String beanName)方法

该方法可以对Bean实例进行额外的增加处理操作。可以是全局针对所有Bean进行统一处理,ApplicationContext初始化时会自动找到实现该接口的类进行所有Bean的增强处理。

6.如果Bean实现了InitializingBean接口,且该接口有 @PostConstruct修饰的方法,则执行该方法(该注解方法是在BeanPostProcessor的postProcessBeforeInitialization中执行的),然后执行afterPropertiesSet()方法;

该方法没有参数,不能对该Bean进行处理,可以增加比如日志、读取配置文件之类的操作。

7.如果Bean自定义了init-method指定的方法,则调用该方法

8.接着调用BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法

9.如果Bean实现了DisposableBean接口,则调用该接口的destory()方法。同InitializingBean类似,该接口如果有指定@PreDestory注解修饰的方法,也会先调用该方法。

10.如果Bean指定了destory-method方法,则执行该方法

tcp如何做到可靠交付?

      会将数据进行分段和重组,支持超时重传,对于收到的请求,会返回响应,对于重复数据,能够去掉重复的,能够通过拥塞控制来控制流量,通过滑动窗口避免数据的丢失

java应用线上本来可以支持1000-2000的qps,但是实际只能支持100-200,怎么排查?

   去监控慢sql,优化sql,去看看是否保存了热点数据在redis中,看下是否有大对象,查看下垃圾回收情况



 

                 

发布了208 篇原创文章 · 获赞 0 · 访问量 5965

猜你喜欢

转载自blog.csdn.net/qq_40058686/article/details/104742479