金证科技股份有限公司社招Java工程师(二面)
- 自我介绍,HR面----------------略
- 直接聊项目,你们公司对分库分表,避免热点是怎么处理的?----------这涉及到数据库瓶颈问题的解决,所以要结合项目,对数据进行垂直和水平拆分。水平分库:(可以手动画个草图来阐述)当用户通过userId来请求数据,通过对userId的分析得出该去哪个数据库进行操作(比如:A数据库是偶数userId,B数据库是奇数userId。不仅仅是通过userId也有按照其他分库的方式,每个库的结构一样,但数据不一样)。水平分表:做法和分库是一样的。垂直分库:依照业务的不同,拆分成多个数据库(用户数据库和产品数据库……各管各的),垂直分表就是依照uid为核心,将字段分割(比如表一存放个人身份信息姓名年龄……,表二存放个人社交信息联系方式地址……)
- 除了分库分表,你还了解些MySQL什么优化?--------------SQL语句上的优化……
- 谈谈对BigDecimal的理解?------------主要是在涉及到金融交易项目中浮点运算丢失精度的问题,通过对构造器的参数为String类型进行算术运算相关API的调用。通过API提供的对象方法进行传统的加减乘除算术运算……
- Spring的IOC和DI、AOP?-------------------IOC直译过来就是控制反转,将创建对象的操作交给Spring框架……,DI利用Spring注入属性值……,AOP切面……。
- SpringMVC的执行流程?------也是画图的策略,从请求----拦截器-----适配器----业务逻辑转发----视图渲染-----返回……来说明。
- MyBatis中#{}和${}的区别?--------#{}属于预编译处理会将sql中的#{}替换为?,调用PreparedStatement的set方法进行赋值,${}属于字符串替换,配置数据源中用过……
- Mybatis的缓存?-----------------一级缓存……,二级缓存……
- 谈谈你所了解的IO模型?-----------------最好是画个草图来阐述。阻塞式IO:当用户进程对服务请求时,服务器在返回数据的过程中,用户线程阻塞在调用处,直到数据返回才继续执行。非阻塞式IO:当用户请求数据时会立即得到一个回复,即使数据报还没准备好,不会阻塞用户线程的其他执行操作。异步IO:用户发出请求后会立即得到一个请求,不阻塞用户的其他执行,当数据准备好后会通知用户。
- 你是如何理解同步/异步,并发/并行的概念的?-----------同步就是调用者必须等到方法调用返回后,才能继续后续的行为,异步调用会立即返回,调用者可以继续后续的操作,因为真正的执行不会影响阻塞调用者。并发,多个任务交替执行,但每次只有一个任务在执行。并行是真正的同时执行……
- 如何理解锁的概念,列举出几个锁来说明它?-------------手写伪代码来说明……
- 两个有序数组,数组中包括一些重复元素,合并成一个有序数组,并且去重,如何通过代码实现?-------个人的思路是先合并,然后通过集合的原理去重……具体手写伪代码即可。
- 你有什么要问的吗?---------我问了线上环境的部署情况,面试官一脸蒙。。。。。。后来又具体地表达了想知道他们公司的项目针对群体(后台管理和前端普通用户)需要考虑哪些问题,面试官还是说不出个所以然来。。。。。。。不好意思再问面试官了。
- 总结:以项目为基本支撑的一些数据库、锁,还有些项目常用的框架为主要考察内容。