记一下今天面试被问到的几个问题。

6.21面试:
面试了一家规模小的公司,面试官问的比较随机,大概是下面这些问题.
1.String 和 StringBuffer的区别

答:首先运行速度,String要慢于StringBuffer,因为String为字符常量,StringBuffer为字符变量,String不可变,线程安全,每次给他加或减字符串操作实际都是新建了一个对象,之前的对象被GC回收,而StringBuffer是直接对字符串进行修改操作,速度要快,StringBuffer内部使用了很多synchronized来保证线程安全。
这里再说下StringBuilder速度比前两者都快,也是作为字符变量操作,但线程不安全,建议在单线程环境使用。
2.hashmap和hashtable区别:
答:HashMap底层是由数组+链表结构而成,在JDK1.8还引入了红黑树来保证get取值的效率,而HashTable底层由数组+链表结构而成,且不允许键值对为null,HashMap则允许,而HashMap线程不安全,HashTable线程安全。

3.hashmap和linkedmap(LinkedHashMap)的区别
答:LinkedHashMap 是 HashMap 的子类,其数据结构也是基于HashMap,LinkedHashMap 是用数组+双向链表来维护数据的顺序,双向链表体现在Entry的上下节点的指针。所以区别HashMap无序,LinkedHashMap有序。LinkedHashMap对HashMap的一些底层方法如recordAccess(), addEntry(), createEntry()进行了重写,也是为了实现维护有序。

4.mysql分页怎么分
答:使用limit,
例:select * from table limit 5; --返回前5行;

select * from table limit 0,5; --同上,返回前5行;

select * from table limit 5,10; --返回6-15行;
补充:limit优化(当查询量大且要分页):select * From students Where s_id >=(
select s_id From students Order By s_id limit 10000,1
) limit 10;
Oracle使用ROWNUM进行分页;选取前5条记录SELECT * FROM student WHERE ROWNUM <= 5
例:–从数据库表中第M条记录开始检索N条记录
SELECT * FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
where t2.r >= M
5.多线程有哪几种实现方式
答:1.继承Thread类,重写run方法;2.实现Runnable接口(无返回值);3.实现Callable接口(有返回)。
6.代码管理工具用什么?当代码冲突了,怎么解决?
答:常用的像Git,svn,代码冲突,查看日志show log,找回原来的版本,revert恢复,,,
(这个问题个人觉得在面试没什么好问的。。)
7.SpringBoot 和 SpringMVC有什么区别?
答:SpringBoot作为Spring的衍生出来的快速开发工具包,简化了配置,内嵌和tomcat,netty等容器,可以直接搭建Spring项目,SpringMVC则是基于Spring和servlet的一个MVC框架,主要用于web工程。
拓展:
8.讲一下RabbitMQ的流程?
答:首先客户端和mq必须建立网络才能发送消息,tcp连接建立,认证用户密码通过,双方就会建立amqp信道(channel),amqp命令通过信道发送。
生产者先通过网络把消息发送到mq,mq收到消息,根据消息中指定的exchange(交换机)来查找绑定消息,然后根据内容将消息存放到对应的queue(队列),queue再把对应的消息发给消费者,消费者对消息进行逻辑处理并返回结果,若返回ack,mq会对这条消息进行删除操作,如果消费者处理不了这个消息,就不会对mq进行修改,或直接拒绝消息处理,返回reject。
9.linux查看错误日志,启动tomcat服务,查看进程?
答:查看日志:tail -f ./logs/catlina.out查看错误字段:cat -n ./logs/catlina.out | grep “Error”;
启动tomcat先cd到tomcat的bin目录下,再./startup.sh,关闭则./shutdown.sh,有时无法关闭,jsp查看tomcat服务进程号,再kill掉。
linux查看进程:ps ax
10.谈一谈什么是垃圾回收机制,什么时候会进行垃圾回收?
答:垃圾回收机制是Jvm引入的自动管理内存空间的技术,可以有效的防止内存泄露,有效的使用空闲的内存。(java中内存泄露:一个内存对象的生命周期超出了程序需要它的时间长度)
当一个对象死亡,jvm就对他进行垃圾回收;
方法一,引用计数法:在对象创建时对引用进行计算,有对象引用就+1,对象引用结束就-1,当计数为0,就可以进行回收了,但是缺点就是不能解决出现循环引用对象。
方法二,可达性分析法(引用链法):从GCRoots向下搜索,搜索路径为引用链,当一个对象到GCRoots没有引用链相连接就可被回收。
补充:回收算法
标记清除:先标记再清除,效率低
复制算法:内存分为两份,每次使用一个,回收后再复制另一个,效率低,对象多的时候性能极低。
标记整理:基于标记清除,但不直接清除,而是对存活对象的进行异端清除。
分代收集:分新生代和老年代进行收集整理。
11.mybatis一级缓存和二级缓存?
答:一级缓存是与SqlSession绑定,基于Perpetual的HashMap本地缓存,多个SQLSession或分布式环境可能出现脏数据,默认开启,当进行增删改操作会被清空。
二级缓存也是基于Perpetual的HashMap本地缓存,但作用域为Mapper,当SQLSession之间需要共享缓存,则使用二级缓存,可以自定义存储源如Encache,默认关闭,打开的话先对实体类实现Serializable序列化接口,配置mapper添加标签。二级缓存也会被增删改操作刷新。
查询流程:二级——>一级——>数据库。
12.JDK1.8有哪些新特性?
1).default关键字,以往接口中的方法是不能以实现形式的,java8可给方法添加default关键字来给接口方法定义具体实现。
2).Lambda 表达式,Java8新增了java.util.funcion包,里面包含常用的函数接口,提升代码简洁性,本质上是一段匿名内部类,也可以是一段可以传递的代码。
3).红黑树,引用在HashMap的底层数据结构,原本是数组+链表,当hash碰撞个数大于8,就会引用到红黑树,用来提升效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值