远光软件:2019校招 Java开发 一二面
远光软件:2019校招 Java开发 一二面
面试题
一面 电话面试:
-
java中public、private等的作用
修饰方法、属性的访问权限。
-
介绍一下数据库设计的三范式
第一范式:表不可再分
第二范式:消除了非主属性对主属性的部分函数依赖
第三范式:消除了非主属性对主属性的传递函数依赖
-
介绍几个常用的Map容器
-
HashMap
:<Key
,Value
>键值对映射,支持null
值 -
ConcurrentantMap
:jdk1.8以后支持并发的Map容器 -
HashTable
:不支持null
的Map容器 -
TreeMap
:有序的Map容器
-
-
在有很多张表连接的非常复杂的查询时如何优化
主要解决问题所考虑的角度:
- 优化查询中的连接
- 优化表的索引
- 优化查询中的查询条件
- 从底层执行计划进行优化
- 使用
explain
对查询的执行情况进行分析
具体的知识点很复杂,要考虑的内容也很多,这里仅给出网上可以参考学习的一些博客帖子:
参考:
-
说一下对
RESTful
的理解RESTful
,全称 Representational State Transfer,表示性状态转移,是一种Http
接口风格。
主要特点是:- 一般使用
json
、xml
等格式传输数据。 - 在接口的调用上采用标准
Http
的方法如GET
、POST
、PUT
、DELETE
等进行“查询”、“增加”、“更新”、“删除”等操作。 - 客户端和服务器之间是无状态的。
- 一般使用
-
数据库进行复杂查询时,如何优化查询的响应时间
与上面一道题的区别,在于面试官在这个题中想从系统、架构方面给出解决或优化方案,上一题则偏向于只考虑数据库本身。
-
考虑使用
Redis
、memcache
等,作为MySQL
的缓存层 -
使用主从数据库进行读写分离:
一般业务中,读操作频度远大于写操作,容易成为性能瓶颈,将数据库分为主从两个,主数据库负责写操作,从数据库定时从主数据库中同步数据,负责处理读操作。
-
分布式部署:
在仅适用主从架构的基础上进一步优化,部署多个数据库集群,每一个集群中再进行主从读写分离。
-
-
介绍下JDBC、Hibenate、MyBatis
JDBC
:是java用于连接数据库的驱动,Hibenate
、MyBatis
都是基于JDBC
进行工作的。
Hibenate
、MyBatis
都属于Java的ORM
框架,用于将关系型数据库映射到对象中,封装了数据库相关的操作。
二者的区别主要在于MyBatis
是可以封装自己写的SQL
代码,而Hibenate
则只能使用其自带的一些操作,在业务操作复杂时,MyBatis
具有更好的灵活性,能根据需求进行SQL
的编写以及优化。 -
MyBatis
连接不同数据库如何配置(配置多数据源)在
MyBatis
的配置文件中,在environments
节点下,通过environments
节点针对每一个数据源进行具体的配置。 -
除了SSM、SSH外,是否关注了解其他的开源框架
二面 现场面试:
-
画下项目的大致架构
-
项目答辩PPT是如何分节组织的
-
职业规划
-
项目团队中扮演的角色
-
Java
虚拟机常用的参数-Xmx
:堆最大容量-Xms
:堆初始大小-Xmn
:新生代大小-Xss
:每个线程堆栈大小-XX:PermSize
:持久代大小-XX:MaxPermSize
:持久代最大值-XX:SurvivorRatio
:Eden
和Survivor
大小比值-XX:NewRatio
:年轻代与老年代大小比值-XX:+HeapDumpOnOutOfMemoryError
:内存溢出时自动Dump
出当前的内存堆转储快照可配置的参数较多,仅列举部分常用的参数,参考:
-
《深入理解Java虚拟机 第二版》
-
-
Jdbc
常用的配置password
:密码user
:用户名socketFactory
:用于创建套接字连接的类connectTimeout
:套接字连接超时socketTimeout
:网络套接字连接超时autoReconnect
:自动重连
-
MongoDb
与mysql
异同mongodb
是非关系型数据库,mysql
为关系型数据库。在数据的逻辑结构上,前者对数据没有固定的格式要求,而后者则需要遵循建表时的规范;
在可拓展性上,因为
mongodb
没有固定的数据结构,具有更好的灵活性、拓展性,所以在业务变化时无需像mysql
一样对数据表进行修改;在效率上,在数据量大时,非关系型数据库也有更好的性能。
-
Linux
常用的发行版本CentOs
、Ubuntu
、kali linux
。 -
会用、常用的
Linux
命令ls
、cd
、rm
、mv
、head
、cat
、tail
、chmod
、mkdir
、kill
、ps
等。 -
Linux
如何查看内存、CPU等的使用情况free
:打印出当前内存的使用情况top
:对各进程的CPU、内存等的使用情况持续监控,类似于windows中的任务管理器
场景、感受
一面
一面中,除了项目外,大部分问的偏基础,在数据库方面问的问题较多,且涉及到了在较复杂的业务需求时的数据库优化问题。平时项目规模较小,在数据库优化的那几个题答的不是很好。最后对于开源项目的关注在此前的面试、看过的面经中基本没有遇到,比较出乎意料。
面试的关注点主要是还是集中在个人的技术以及对技术的关注和了解上,整体属于比较普通的技术面。
二面
二面时,面试官是大数据部门的经理,对项目的架构规划问的比较多,一开始就让对两个曾经项目中的架构方面做介绍,以及比赛项目答辩的PPT章节划分,介绍的同时会问为什么要这样设计。在问技术相关的问题时,在发现是我比较熟悉的领域后就直接跳过了,在我不怎么熟的领域时则让我尽可能回答我知道的,感觉在试探我的知识面。最后是职业的规划,问的也很细,在说完自己的想法后,面试官结合我之前在架构方面的回答,提了很多今后职业发展的建议和项目流程的理解(被上了一课,收获颇丰),然后HR面。
二面考察的很广,面试官不仅想知道我会啥,还我那些不会的基本上问了个遍,应该是要对个人的能力、知识面有一个准确的评估。除了开发直接相关的知识外,在项目管理和架构上也问了很多,给了很多建议。属于专业岗位先关的非常综合、非常有意义面试。
总结
- 除了学习应用的知识外,还需要保持对领域、技术的关注。(一面被问到对开源项目的关注)
- 对于项目的架构和流程值得更加深入地去思考:一个项目在开发团队内部、部门之间、客户与公司之间的整体流程与沟通,所选的技术与其他技术的异同对比、所选技术与架构能达到的效果、公司与其他竞品公司在公司整体以及产品上的横向对比。(二面被上了一课)
- 在今后的职业规划中,也需要尽可能的去全方面提升能力,当某项任务能提升某项自己有待提升的能力时,值得主动去和上级申请。(二面被上了一课的另一个内容)