JAVA 基础部分常见面试题(进阶)

你分析过MyBatis工作原理吗?

答:读取配置文件(数据源、事务、映射Sql文件)并返回InputStream流对象、根据IO对象解析出 Configuration对象,创建SqlSessionFactory对象、从 SqlSessionFactory中创建SqlSession、 SqlSession中调用Executor执行数据库操作&&生成具体SQL指令、 对执行结果进行二次封装、 提交与事务。

 

Volatile和Synchronized四个不同点?

答: 1 粒度不同,前者针对变量 ,后者锁对象和类

       2 syn阻塞,volatile线程不阻塞

       3 syn保证三大特性,volatile不保证原子性

 

Volatile?

指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。

 

Volatile如何保证内存可见性:

当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存。

当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。

 

阻塞:CPU停下来等一个慢的操作完成以后,才会接着完成其他的工作。

非阻塞:非阻塞就是在这个慢的执行时,CPU去做其他工作,等这个慢的完成后,CPU才会接着完成其后续的操作。

同步:就是一个任务的完成需要依赖另外一个任务,只有等待被依赖的任务完成后,依赖任务才能完成(打电话)。

异步:不需要等待被依赖的任务完成, 特点是通知(短信)。

 

线程池的作用?

在程序启动的时候就创建若干线程来响应处理。

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

主要实现类: ExecutorService 。

 

Spring IOC (控制反转,依赖注入)

 

 

一个HTTP请求?

DNS域名解析 –> 发起TCP的三次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如javascript、css、图片等) –> 浏览器对页面进行渲染呈现给用户。

 

GET 和 POST 的比较?

Get 请求数据 - 能够被缓存, 有长度限制。

Post 提交数据 - 不会被缓存,没有长度限制。

 

HashMap 的实现原理?

维护每一个元素是一个链表的数组。

  1. 实现了数组+链表的特性,查找快,插入删除也快。

  2. put 时会调用键的HASH()方法,通过hashCode的遍历entry<K,V>的键值对,如果key.equals(e.key)相等,就对value进行替换。

 

HashMap、  ConcurrentHashMap、 LinkedHashMap

 

实现多线程的三种手段,一种是继续Thread类,另外一种是实现Runable接口,还有就是实现Callable接口。

Object中方法notify(唤醒被wait方法阻塞的线程),notifyall,wait(阻塞当前线程)都是用来对给定对象进行线程同步的。

sleep 和 wait 的区别 ? sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU。

 

堆和栈?

基本类型和引用类型都是在栈中分配的,堆是存放new创建的对象和数组。类变量(static)在程序加载时就在堆中分配内存,地址放在栈中。

 

ArrayList,Vector, LinkedList?

Vector(线程安全) 默认增长一倍,而ArrayList 却是一半。

 

IO?

InputStream和OutputStream,子类有File...

InputSteamReader 和  OutputStreamWriter。

程序中输入输出都是以流的形式, 流中保存的是字节文件。字符流是字节流的包装。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值