本帖最后由 逆风TO 于 2018-7-11 14:57 编辑
公司名称:陕西昆特气象服务有限公司 公司地址:龙首原地铁口左转50米 公司规模:50
主要业务:陕西省市县气象局业务 公司环境: 笔试题:
没有笔试题,小公司没那么多套路。 面试题:(只挑有技术含量的写了) Q:你好
A:你好
Q:hibernate和mybatis区别 A:hibernate是一个映射完整的orm框架,面向对象的方式去开发,不需要手写SQL,数据封装稍微厚重一些,容易查询出一些冗余的字段,并且发送的过多的SQL。mybatis是一个半成品框架,需要手写SQL,但SQL优化更细致一些。 hibernate数据库移植性好,配置文件中配好数据库及方言后,会自动根据配置去发送不同的SQL;而mybatis需要根据不同的数据库发送不同的SQL。 方言问题: eg1:字符串拼接(MySQL是concat函数,Oracle是||) eg2:分页(MySQL是limit关键字,Oracle是rownum) hibernate对于索引的触发性差,由于SQL不是自己手动写的,所以很多时候无法触发预设的索引;而mybatis却可以更加细致的控制。 hibernate的门槛比价高,比较难掌握;mybatis却轻巧的多。 缓存问题:hibernate一级缓存是session级别,二级缓存是sessionfactory级别;mybatis一级缓存是SQLsession级别,二级缓存是mapper级别。
Q:存储过程和存储函数区别 A:存储函数有返回值(return),存储过程没有返回值,但可以使用out参数传出多个结果。存储函数可以在select语句中使用(eg: length(‘abc’),to_char(...)等),而存储过程不行(call调用,或PL/SQL调用,jdbc调用---prepareCall)。存储函数一般封装一个查询结果集,而存储过程一般存储一段事务代码。一般存储过程跟框架的业务层互斥,把业务封装到存储过程中,那Java代码就不需要控制了,如果某个业务需要跟数据库进行多次交互的话,存储过程效率是比较高的,因为不用频繁操作连接。
Q:说一下java的类加载机制: A:java中是双亲委托机制, Q:应用类加载器加载某个类时,会先委托扩展类加载器去加载;而拓展类加载器会继续委托启动类加载器去加载;如果启动类加载器加载失败,会尝试拓展类加载器去加载;如果拓展类加载器也加载失败,会使用应用类加载器去加载,如果也加载不到,会抛出ClassNotFoundException。
Q:openSessionInView怎么解决noSession问题的
A:Action层调用查询方法时,如果懒加载了,那么Service层事务一旦提交,hibernate的session会立即关闭,紧接着,在请求结束前再去查询懒加载代理对象中的具体信息时,由于刚才那个session关闭了,所以就会产生noSession异常。而配置openSessionInView之后,在service层去查询时,hibernate当前session会被绑定到当前线程上,哪怕事务提交,session也不会关闭。所以,在Action层懒加载查询完一条数据之后,请求结束前,再次查询具体数据时,session仍然存在,直到请求结束,session关闭,其中的数据库连接归还连接池。 Q:技术差不多就这些,等会我领导来跟你谈工资 A:好的
过了1分钟,项目经理过来了。 Q:小*是吧,技术很不错,家是**的呀,不错,咱俩算是老乡了,要多少工资? A:我上一家是**K,现在想要**K
Q:能不能降一降,公司这边只能给到**K
A:我觉得我的能力拿**K没有任何问题,要不您再加一些吧 Q:。。。(一堆扯皮)
A:最后拿到了**K的offer
面试总结:
小公司随便面,技术轻松hold住面试官,简直不要太easy
|