2018java后台各大公司面试笔记

本文总结了2018年各大公司Java后端面试的重点,包括但不限于代理模式与适配器模式、Dijkstra算法、MySQL知识点、HTTPS、TCP/IP、线程池、并发容器、数据库索引、设计模式、JVM、面试技巧等内容。涉及到的公司有阿里巴巴、京东、腾讯音乐、顺丰等,涵盖了数据库设计、数据结构、网络协议、并发编程、内存管理等多个领域。
摘要由CSDN通过智能技术生成

阿里

  1. 分库分表
  2. 数据库中间件
  3. MyCAT是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库、容灾管理,而且可以用于多租户应用开发、云平台基础设施
  4. 高并发请求处理
  5. 高流量限流
  6. 多线程
  7. concurrentHashMap
  8. CAS
  9. 乐观锁
  10. mysql limit分页如何保证可靠性

二面 7月26日(22分钟): 

  1. http是否需要多次建立tcp连接?

      https://blog.csdn.net/huangyuhuangyu/article/details/78220005

  1. 如果RPC的注册中心挂了怎么办?
  2. RPC两端如何进行负载均衡?
  3. MQ推拉模式,优缺点

ActiveMQ是一个消息中间件,对于消费者而言有两种方式从消息中间件获取消息:

Push方式:由消息中间件主动地将消息推送给消费者;

Pull方式:由消费者主动向消息中间件拉取消息采用Push方式,可以尽可能快地将消息发送给消费者 而采用Pull方式,会增加消息的延迟,即消息到达消费者的时间有点长但是,Push方式会有一个坏处:如果消费者的处理消息的能力很弱(一条消息需要很长的时间处理),而消息中间件不断地向消费者Push消息,消费者的缓冲区可能会溢出。

  1. MySQL数据库索引那些?
  2. 组合索引怎么用?

在对表需要进行查询或者排序操作时,可以对表中某个或者某几个字段添加索引,对一个字段添加索引就是单个索引,对多个字段添加索引时就是组合索引。从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用,断点后面的索引没有起作用;

京东

一面:

1、HashMap、concurrentHashMap底层原理把知道的都说一遍
2、线程池把知道的都说出来
3、线程同步(synchronized、volatile、ReenreantLock、ThreadLocal)
4、设计模式把知道的说一遍

二面:
1、Java基本数据类型

 整型 byte(1字节) short (2个字节) int(4个字节) long (8个字节)

浮点型 float(4个字节) double(8个字节)

逻辑性 boolean(八分之一个字节)

字符型 char(2个字节,一个字符能存储下一个中文汉字)

byte->short , char->int->long

float->double int ->float long->double 小可转大,大转小会失去精度
2、arrayList、linkedList底层原理以及其区别,各自的使用场景
4、HashMap有哪些缺点、是不是线程安全的、扩容
5、红黑树、b树、b+树底层原理
6、索引采用b+树和HashMap的区别,使用场景,数据库为什么用b+树做索引,而不用HashMap

7、数据库隔离级别以及各种隔离级别有可能会产生什么问题

腾讯

1.问项目,真的是细,细的有些我自己都忘了(千万要知道项目的细节)  

3.说一下线程池这一块?(讲了线程池的几个参数以及几个线程池的细分)

4.Java提供了几个类加载器?分别是?怎么对类进行加载的?

5.hashCode知道是干什么的吗?如果要你重写,需要注意哪些点?

   SUN官方的文档中规定"如果重定义equals方法,就必须重定义hashCode方法,以便用户可以将对象插入到散列(哈希)表中

 在集合框架中的HashSetHashTableHashMap都使用哈希表的形式存储数据,而hashCode计算出来的哈希码便是它们的身份证。哈希码的存在便可以:

快速定位对象,提高哈希表集合的性能。

只有当哈希表中对象的索引即hashCode和对象的属性即equals同时相等时,才能够判断两个对象相等。

从上面可以看出,哈希码主要是为哈希表服务的,其实如果不需要使用哈希表,也可以不重写hashCode。但是SUN公司应该是出于对程序扩展性的考虑(万一以后需要将对象放入哈希表集合中),才会规定重写equals的同时需要重写hashCode,以避免后续开发不必要的麻烦。

hashCode方法可以这样理解:它返回的就是根据对象的内存地址换算出的一个值。这样一来,当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

重写equals时需要注意满足java语言规范对于equals的要求

Java语言规范要求equals需要具有如下的特性:

自反性:对于任何非空引用 xx.equals() 应该返回 true

对称性:对于任何引用 x y,当且仅当 y.equals(x) 返回 truex.equals(y) 也应该返回 true

传递性:对于任何引用 xy z,如果 x.equals(y)返回 truey.equals(z) 也应返回同样的结果。

一致性:如果 x y 引用的对象没有发生变化,反复调用 x.equals(y) 应该返回同样的结果。

对于任意非空引用 xx.equals(null) 应该返回 false

1.equalshashCode的定义必须一致,两个对象equalstrue,就必须有相同的hashCode。反之,如果两个对象的hashcode相同,equals不一定相同。2.当重写equals方法时,一定要同时把hashcode方法一并重写,因为要保证在实现hash表的扩展性

 

如果不被重写(原生)的hashCodeequals是什么样的?
 

  1.       不被重写(原生)的hashCode值是根据内存地址换算出来的一个值。
  2.       不被重写(原生)的equals方法是严格判断一个对象是否相等的方法(object1 == object2)。

  为什么需要重写equalshashCode方法?
      在我们的业务系统中判断对象时有时候需要的不是一种严格意义上的相等,而是一种业务上的对象相等。在这种情况下,原生的equals方法就不能满足我们的需求了
      所以这个时候我们需要重写equals方法,来满足我们的业务系统上的需求。那么为什么在重写equals方法的时候需要重写hashCode方法呢?
      我们先来看一下Object.hashCode的通用约定(摘自《Effective Java》第45页)
 

  1.     在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话,那么,对该对象调用hashCode方法多次,它必须始终如一地返回 同一个整数。在同一个应用程序的多次执行过程中,这个整数可以不同,即这个应用程序这次执行返回的整数与下一次执行返回的整数可以不一致。
  2.     如果两个对象根据equals(Object)方法是相等的,那么调用这两个对象中任一个对象的hashCode方法必须产生同样的整数结果。
  3.   如果两个对象根据equals(Object)方法是不相等的,那么调用这两个对象中任一个对象的hashCode方法,不要求必须产生不同的整数结果。然而,程序员应该意识到这样的事实,对于不相等的对象产生截然不同的整数结果,有可能提高散列表(hash table)的性能。

     如果只重写了equals方法而没有重写hashCode方法的话,则会违反约定的第二条:相等的对象必须具有相等的散列码(hashCode
     同时对于HashSetHashMap这些基于散列值(hash)实现的类。HashMap的底层处理机制是以数组的方法保存放入的数据的(Node<K,V>[] table),其中的关键是数组下标的处理。数组的下标是根据传入的元素hashCode方法的返回值再和特定的值异或决定的如果该数组位置上已经有放入的值了,且传入的键值相等则不处理,若不相等则覆盖原来的值,如果数组位置没有条目,则插入,并加入到相应的链表中。检查键是否存在也是根据hashCode值来确定的。所以如果不重写hashCode的话,可能导致HashSetHashMap不能正常的运作、

5.ClassNotFoundException知道吗?遇到场景是什么?怎么解决的?

   常见的场景就是:

  1 调用class的forName方法时,找不到指定的类

  2 ClassLoader 中的 findSystemClass() 方法时,找不到指定的类

     3 ClassLoader 中的 loadClass() 方法时,找不到指定的类

 

二、造成异常的常见原因:

 

1. 所需要的支持类库放错了地方,并没有放在类路径(CLASSPATH环境变量)里面。

2. 使用了重复的类库,且版本不一致。导致低版本的被优先使用。

3.类名错了,一般是使用Class.forName的时候,手工指定了类名的情况。

4. 没有导入纯JAVA驱动包。

6.NoSuchMethodException遇到过吗?

  反射时候会出现,查了下Class的文档,该类下原来有两个方法:getMethod,getDeclaredMethod。看了下说明大概的意思就是getMethod只能调用public声明的方法,而getDeclaredMethod基本可以调用任何类型声明的方法

腾讯音乐(一面,50分钟)后台开发方向

1.讲讲priority_queue的底层数据结构实现过程和原理。

2.讲讲hash的原理,解决哈希冲突的方法。

3.Hash和搜索二叉树的优缺点。

4.一个8g的数据文件,怎样找出积分排名前100的用户(数据内容是一列ID,一列积分,积分是流动的)。

5.如何监听tcp丢包问题。(细节知识点)。

6.TCP和UDP的细节知识点(建立和断开的状态转移)。

7.单链表找倒数第n个节点,说所有你能想到的方法。 

9.线程和进程的区别以及优缺点。

腾讯音乐 (二面 20分钟)

3.select上限?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值