目录
前言
前一篇《技术成长之路-Java基础篇》我们主要对于各种公司的面试题考点关于Java基础做了一个简单总结,这一节我们讲一下更深层次的问题,依然是,我来写,诸君思考!
面试题篇
依然以面试题入手,针对问题,解决问题,然后做出总结!
阿里面试题
线程和进程的本质:
为什么出现进程?
·批处理操作系统
·A/B的顺序和阻塞执行
·进程
·线程
- 如何让多线程顺序执行
使用join()方法
T1 =New thread({
Sout(1);
});
T2 =New thread({
Sout(2);
});
T3 =New thread({
Sout(3);
});
T1.join();
T1.start();
T2.join();
T2.start();
T3.join();
T3start();
控制台输出:(永远顺序执行)
1
2
3
Join()方法,为什么可以让多线程顺序执行?
在Join()源码,使用线程锁将使用wait将当前线程阻塞,我们知道,wait为阻塞,那么什么时候notify唤醒呢?答案是,在jvm里notify
- wait 和 notify为什么要加线程锁
- sleep 和 wait的区别
- 线程锁的实现原理
Synchronized:jvm实现
类锁
全局锁
对象锁
5. Synchronized原理分析
6. wait 和 notify原理分析
7. 线程生命周期
线程有多少种状态
New 初始
Runnable os调度
Blocked 阻塞
Waiting 等待
Time_waiting 超时等待
Terminated 终止
8. 如何终止一个线程
Flag()(设置一个成员变量,通过更改成员变量的变化来终止线程)
Interrupt()返回ture/false
不建议使用stop()
9. synchorize和lock的区别
10. 分布式锁的实现方式
11. Spring bean 是怎么管理的?
单例:spring的运行周期,都不会回收
得益于ioc,因为采用注册式的单例,始终在map中保存的实例的引用地址
GC
只有当ioc容器不被销毁,ioc中的单例bean就永远存在
12. Spring中的bean是不是线程安全的?
是不是线程安全,要看具体bean
知识点篇
JVM
Spring FrameWork
(spring.io.com)官方api提供9大组件
- Ioc
Java bean
Setter、gettter method
Java beans(规范)
内省
基础核心特性(反射)
附加特性:引用(reference)
Reference
Softreference
Weakreference
phantomreference
…
Beaninfo
Beandescreptor
Propertydescriptor
事件:propertychangeevent
监听器:propertychangelistener
Methoddescriptor
一:Ioc
应用不关心依赖组件的来源,通过一定di方式查找
抄袭了javaee 概念,javaee容器(ejb容器,jsf容器)
ejb容器
bean模式
Local
容器bean
Remote
Rmi
Bean类型
会话(session bean)
无状态bean
有状态bean
持久化bean(persistence bean)
Hibernate
消息驱动bean(java messaging bean)
Jms
Activemq,kafka
二:Di(依赖注入)
~java ee
jndi(java naming and directory interface)
1 javax.naming.context
名称
Javax.naming.context#lookup(java.lang.string)
Javax.naming.context#lookup(java.naming.name)
Ejb
1javax.ejb.@ejb
~依赖查找(dependency lookup)
1 id 别名,名称查找
BeanFactory #getbean(string):object
2 类型查找
Beanfactory #getbean(Class):T
3 注解查找
ListableBeanFactory#getBeanWithAnnotation(Class)
4 factorybean查找
Factorybean#getobject()
5 objectfactory查找
Objectfactory#getobject()
~依赖注入(dependency injection)
方法
Spring @autowired
Java @resource
Java ee @inject
途径
1 属性注入
2 方法注入
3 构造器注入 - Event
核心模式:观察者模式
Spring事件:applicationevent
Java.util.eventobject
spring事件监听器:applicationlistener
Java.util.eventlistener
spring事件广播器:applicationeventMuliticaster
simpleApplicationEventMuliticater
bean生命周期管理之一
事件(包装)数据变化
- Resource
Url资源管理
协议
1 获取协议:java.net.url#getProtocol
2 协议处理
HTTP:sun.net.www.protocol.http.handler
FTP:sun.net.www.protocol.ftp.handler
HTTPS:sun.net.www.protocol.https.handler
FILE:sun.net.www.protocol.File.handler
EMAIL:sun.net.www.protocol.Emai.handler
ClassLoader(class path)资源管理
资源
获取当前classloader资源:java.lang.classloader # getResource(String)
获取当前classloader所有资源:java.lang.classloader # getResources(String)
获取当前classloader资源inputstream:java.lang.classloader # getResourceAsStream(String)
Spring 资源管理
资源定位:classpath:/META-INF/abc.properties
多资源定位:classpath*:/META-INF/abc.properties
Resource接口
Url ,File和 classloader 封装实现
语义:
资源定位(url,File)
资源流(inputstream)
实现类:
ClasspathResource
GetURL() -> classloader #getResource(string)
Getinputstram() -> classloader #getResourceAsStream(string)
加载器
Resourceloader
获取resource:resourceloader # getResource(String)
默认实现:defaultResourceLoader
前缀= “classpath:”-》ClasspathResource
否则 -》 fileUrlResource 或 UrlResource
协议扩展
Protocolresolver
通过路径解析出resource
- i18n
1 Java i18n
Java标准接口 resourcebundle
<java1.6 :乱码,解决方案 native2 as cci
Java1.6: ResourceBundle.Control
Java1.8: ResourceBundleControlProvider
Java 1.6
2 spring messagesource
messageFormat
Hello,{0}-> 0 = “world” -> hello,world
实现类
ResourceBundleMessageSource
- Validation
Java bean validation(jsr -308)
Spring validation
Sring validator + bean validation:LocalValidatiorFactoryBean
使用场景
标准 java bean校验
Springmvc校验
form校验,@requestBody 校验,可以自定义
Spring boot外部化配置
@configurationPorperties
- Data banding
使用场景
Spring 自定义绑定
Spring mvc参数绑定
Spring boot 外部化配置
@configurationproperties - Type conversion
常见类型转换
自定义转换
使用场景
Spring boot 外部化配置
@configurationproperties
- Spel
- Aop