顺丰科技java面经

一面:
1.问项目
2.基本数据类型
int、long、short、byte、float、double、char、boolean
3.什么时候用包装器类型,什么时候用基本数据类型
当和集合联合使用的时候用包装器类型,当值允许为null时用包装器类型,当使用反射时用包装器类型。其余时候用基本数据类型。
4.异常和错误?捕获异常后,什么时候直接处理,什么时候抛出去给上一层处理?
异常和错误都继承了Throwable类,错误是系统自带的不需要程序员去处理,而异常分为运行时异常和非运行时异常。运行时异常通常是逻辑问题,是不受检异常,程序中可以选择处理,也可以选择不处理。非运行时异常是受检异常,必须由throws声明抛出,不处理会编译不通过。由外界不稳定性引起的异常,就可抛出。考虑出现异常的责任,如果在系统外,就该抛出。
5.抽象类和接口的区别?什么时候使用抽象类而不是接口?

  • 抽象类单继承,接口多实现。
  • 抽象类有普通方法,接口只有抽象方法。
  • 抽象类有构造方法和静态方法,但不可用abstract修饰。
  • 接口中默认成员变量修饰符:public static final,默认方法:public abstract
  • 抽象类中的方法修饰符可以用public、protected;接口中的方法只能是public
  • 抽象类表示的是"is-a”关系,而接口表示的是“like-a”关系。抽象类和其子类应该是一般和特殊的关系,接口是为其实现类提供一系列规则。
  • 实现接口的类必须实现它的全部方法,但继承抽象类的子类可以有选择的继承。
  • 当需要为一些类提供一些共有的实现代码时,用抽象类比较好。使用抽象类是为了代码的复用,使用接口是为了实现多态性。
    6.数据库查询速度慢时用什么去检查为什么慢?怎么优化?
    定位方法:第一种:
    show full processlist;
    show variables like ‘%query%’; //查询query相关的参数设置
    set global long_query_time=2; //设置最长查询时间为2
    set global slow_query_log= on; //将query日志打开
    set global slow_query_log_file = ‘地址’ //设置日志的存储位置
    第二种:
    直接在每句sql前加explain
    优化方式:
  • 更改查询字段
  • 索引
  • 减少表之间的关联

7.什么情况下用索引?
频繁作为查询条件的字段应该建立索引,多表连接查询时连接列创建索引,需要经常GROUP BY和ORDER BY的列。
8.Linux看过吗?
9.http和https的区别?

  • https需要安全证书,大部分证书都不是免费的。
  • http是超文本传输协议,信息是明文传输的,https是ssl加密文本传输协议。
  • http和https使用的端口不一样,前者是80,后者是443。
  • http的连接是简单的、无状态的。https是基于http和ssl协议构建的可进行加密传输、身份认证的网络协议,比http安全。
    10.http和tcp的关系
    http是基于tcp协议的。
    HTTP的责任是去定义数据,在两台计算机相互传递信息时,HTTP规定了每段数据以什么形式表达才是能够被另外一台计算机理解。而TCP所要规定的是数据应该怎么传输才能稳定且高效的传递与计算机之间。
    11.post和get
    12.讲讲四次挥手?tcp四次挥手中客户端ack断掉了没有发出去怎么办?
    客户端发送完ACK包后可能因为网络存在问题导致无法及时到达服务端,那么一定时间后服务端会启动重发机制再次发送FIN包,如果客户端早早就关闭了连接,那么服务端将不再有可能收到Ack确认包。
    13.用户、角色、权限。数据库该怎么设计?

二面:
1.问项目
2.list和set是有序的吗
list有序,set无序。
3.多线程的实现方法?
4.具体讲讲sychronized?常用场景?

  • 修饰普通方法,锁的是实例对象。
  • 修饰静态方法,锁的是类。
  • 修饰代码块,锁的是括号内的对象。

5.项目里具体用过哪个多线程实现?(我答的ThreadLocal)
6.spring、springMVC、springboot的区别
ioc用了哪些
7.为什么要用spring boot?
8.了解哪些设计模式?项目中用过什么设计模式?
权限,拦截器,用了观察者模式。
用了单例线程池。
用了工厂模式,返回状态码。
AOP日志,代理模式。
9.代理模式具体实现过程?
10.数据库几亿行时怎么优化?怎么垂直优化?
11.spring boot中用过哪些starter
12.给乱序数组排序,map、set的子类里有哪些是自主排序的?

你可能感兴趣的:(Java基础)