网易面试 备战-2

问题网址: https://blog.csdn.net/qq_37939251/article/details/83155576

一面:

1 微服务的架构介绍,微服务与SOA的区别

微服务就是一个轻量级的服务治理方案,代表技术:SpringCloud,dubbo等等;

 SOA(Service oriented Architecture)面向服务架构

       分层架构(MVC)

       面向服务架构(SOA)

     3.微服务特点

            (1)系统是有多个服务构成(服务组件化)

              (2)每个服务可以单独独立部署(去中心化)

              (3)每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的,也是比较符合软件设计原则的,高内聚就是每个服务内部的关系是非常密切的,每个服务之间只关注完成一个功能。(去中心化, 基础设施自动化:自动化部署等)

两者区别: https://blog.csdn.net/zpoison/article/details/80729052

 

SOA 以 mule 为例,架构如图:

 

 

 

2 分布式事务处理

网址https://www.cnblogs.com/savorboard/p/distributed-system-transaction-consistency.html

一、两阶段提交(2PC)

二、补偿事务(TCC)

三、本地消息表(异步确保)

四、MQ 事务消息

3  spring特性,ioc,aop原理及实现。

spring特性:ioc和aop;

ioc原理:https://www.cnblogs.com/superjt/p/4311577.html

工厂模式代码:https://blog.csdn.net/weixin_35985385/article/details/81430545

工厂模式与ioc区别: 完全解耦合,ioc服务之间的依赖通过容器控制,具体通过反射实现:https://blog.csdn.net/H12KJGJ/article/details/73614258

 

4 java concurrent包下的的东西,和其中的实现,concurrentHashMap原理和ThreadPoolExcutor原理。

java concurrent包下的的东西,前面的文章写过了;主要是JUC锁:包括独占锁,共享锁;公平锁,非公平锁的实现。

具体实现由 重入锁,读写锁;信号量,barrier(完整具体单词记不住,实现共享锁的几个具体实现)等

另外还有几个阻塞队列, fork/join任务分解框架; condition的signal,await; park,unpark 来替代线程的wait和sleep。

concurrentHashMap:前面写过:底层 数组+链表, 链表大于8,启用红黑树; 1.8前使用分段锁;1.8 使用volatile+CAS实现并发。

ThreadPoolExcutor原理:前面写过:主要是构造方法 以及 一个请求进来,核心线程,队列,普通线程以及饱和策略的处理。

 

5 linux常用命令,如何查看日志。

见 https://www.cnblogs.com/gaojun/p/3359355.html

6 项目用到了spring cloud什么组件,分别作用是什么,原理是什么。

 

7 java反射原理

https://www.cnblogs.com/hongxinlaoking/p/4684652.html

1 首先明确概念:一切皆对象--类也是对象

2 然后知道 类的内容: modifier,constructor, field,method

3 其次明白加载,Animal.class 在硬盘上 是一个文件; 加载到内存中,可以认为是一个对象,是java.lang.class对象。

运行实例时产生的对象 与 类的对象的区别是 : 有些构造函数的入参 在 类的对象中  是没有确定的。

8 hashmap原理

hashmap原理:前面介绍过

 

9 手写生产者消费者代码。

代码见:https://blog.csdn.net/qq_27603235/article/details/73744768

主要定义商品类, 然后再定义两个类: 生产者和消费者,都实现Runnable接口。 然后将阻塞队列BlockingQueue作为 生产者和消费者的成员变量,添加到 生产者和消费者 的构造函数中。  这样的话,如果阻塞队列BlockingQueue的长度为10,那么该队列如果达到10的长度,还有生产者想往里 加数据,就会一直阻塞等待;直到有消费者消费了队列数据, 队列数据的长度小于10之后,生产才能继续往 队列里生产数据。  消费者也一样,如果队列里没有数据可消费,消费线程就阻塞一直等待,直到有数据生产到队列中。

阻塞轮询队列比较消耗性能,此时可以定义两个condition状态 produceCondition,consumeCondition; 当生产者发现队列已满时,produceCondition.await;然后等待消费者消费了数据之后,使用produceCondition.signal 唤醒生产者。consumeCondition用法也一样。

 

 

10 使用concurrent包下的来实现生产者消费者。

 

二面:

1 memcached扩容/memcached原理/路由算法/为什么要分为多个slab

这个有点老的,不管。

2 ArrayList和LinkedList/一亿个int要用哪种

一个底层是数组,一个底层是链表。

 

3 长连接问题,连接过程网络断开怎么办,在客户端和服务端分别需要做什么处理(面试官提示心跳包,无奈还是不了解)

长连接的处理方式是:

Server端收到Client端发来的信息之后,开始心跳计时,在设定时间内如果收到Client发来的消息,则重置计时器,否则计时结束断开连接。

Client端,处理方式是:用time.NewTicker创建一个定时器,每间隔一秒发送下当前时间到服务器

 

4 spring事务,spring事务实现原理。抛出异常之后回滚情况。启动的线程中出现异常会如何处理。

参考:https://www.cnblogs.com/yixianyixian/p/8372832.html

spring事务:acid ;  传播行为:propagation behavior ;  隔离级别:4个 ; 引起的问题:脏读, 幻读, 不可重复读。

抛出异常之后的回滚情况,可以指定回滚规则:哪些异常需要回滚;哪些异常不需要回滚。

事务超时 当做一种异常来处理:需要回滚事务。

在加有事务的类中启用线程,线程不会重新开启新的事务而是与当前类共用事务。事务的提交也是一起进行。

如果线程需要单独控制自己的事务,那么加上 propgation  的 REQUIRED_NEW 标记。

https://blog.csdn.net/kongkongyanan/article/details/81703415

5 分布式事务处理和实现。

前面已经说过

 

6 手写线程安全的单例模式

https://www.cnblogs.com/xudong-bupt/p/3433643.html

https://www.cnblogs.com/lixuwu/p/5676143.html

 

synchronized 在锁 实例 和 XXX.class 的区别:

  • 一个锁的是类对象,一个锁的是实例对象。
  • 若类对象被lock,则类对象的所有同步方法全被lock;
  • 若实例对象被lock,则该实例对象的所有同步方法全被lock

参考: https://www.cnblogs.com/lixuwu/p/5676143.html

 

其实这两种锁机制都是实例锁,出现时间相差的原因是,

synchronized(this){}可以在方法内部部分加锁,同步机制更加灵活,可以设置不需要加锁的部分,故而效率会高些;

synchronized methods(){} 控制的是整个方法体,所以方法里面的所有内容都会参与加锁。

 对比说明同步代码块比同步方法效率更高。

 

7 查看错误日志,怎么错误排查,顺序是怎样的。

 

 

 

常见设计模式代码:手写几个, 包括单例, 工厂等 。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值