多线程
java内存模型JMM https://blog.csdn.net/suifeng3051/article/details/52611310
内存屏障 https://blog.csdn.net/kuangzhanshatian/article/details/47949059
synchronized的实现原理 http://www.importnew.com/23511.html
锁膨胀和优化 https://www.cnblogs.com/dsj2016/p/5714921.html
volatile详解 https://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html?_t_t_t=0.574690104695037 https://cloud.tencent.com/developer/article/1006845
单例设计模式volatile作用JIT重排序 http://blog.csdn.net/glory1234work2115/article/details/50814419
AQS锁 https://www.cnblogs.com/waterystone/p/4920797.html
reentranlock实现 https://blog.csdn.net/kangxiongwei/article/details/72469434
多线程-乐观锁、悲观锁 CAS http://blog.csdn.net/truelove12358/article/details/54963791 http://www.importnew.com/20472.html
并发工具类 CountDownLatch、CyclicBarrier、Semaphore http://blog.csdn.net/catoop/article/details/49866695
线程池参数、任务丢弃策略 http://blog.csdn.net/maoruibin9035/article/details/71425379
synchronized和lock的区别 https://www.cnblogs.com/luyang08/p/5955981.html
ForkJoin https://www.jianshu.com/p/f777abb7b251
HashMap实现原理 https://www.cnblogs.com/chengxiao/p/6059914.html
HashMap线程不安全的体现 http://www.importnew.com/22011.html#comment-661047
ConcurrentHashMap http://www.importnew.com/22007.html
线程池中的blockqueue https://www.jianshu.com/p/210eab345423
java concurrent 包 https://www.cnblogs.com/vijozsoft/p/5585620.html http://blog.csdn.net/defonds/article/details/44021605/
简述 ConcurrentLinkedQueue LinkedBlockingQueue 的用处和不同之处 http://blog.csdn.net/jiangguilong2000/article/details/11617529
线程池关闭 http://blog.csdn.net/xxcupid/article/details/51993235
三种可能不执行finally代码块的情况
- 在try代码块之外产生异常或者返回下是不会执行finally代码块的 - 执行try代码块时候退出了JVM虚拟机 System.exit(0)
- 在子线程执行try代码块或者catch代码块时候突然关闭了线程,也可能不执行finally代码块
- 突然断电了也可能
可重入锁:可重入锁指的是在一个线程中可以多次获取同一把锁,比如:一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法,而无需重新获得锁;
JVM&性能调优
JVM运行时数据区 https://blog.csdn.net/sinat_35512245/article/details/54744815
GC http://www.importnew.com/23633.html
java类的加载器 http://blog.csdn.net/gjanyanlig/article/details/6818655/ 精读http://blog.csdn.net/zhoudaxia/article/details/35824249
jvm性能调优监控工具 https://my.oschina.net/feichexia/blog/196575
深入理解垃圾收集器和收集器的选择策略 http://blog.csdn.net/KilluaZoldyck/article/details/75081875
sql执行计划 http://blog.csdn.net/lxxiangyong/article/details/27089413 其实根据key就可以判断
mysql 索引数据结构 http://blog.jobbole.com/24006/
mysql优化 https://www.zhihu.com/question/19719997
tomcat源码解析 https://yq.aliyun.com/articles/20169?spm=a2c4e.11153940.blogrightarea20177.21.6d3057d5lulVPI
JVM知识点梳理 http://mp.weixin.qq.com/s/yI9Ij6iDX0zQPPLggZbTRw
java性能优化 http://www.codeceo.com/article/java-performance-skill.html
effective java https://www.cnblogs.com/yulinfeng/archive/2017/08/03/7282649.html
数据库性能优化 http://blog.csdn.net/yzllz001/article/details/54848513
jvm虚拟机性能管理 https://blog.csdn.net/chwshuang/article/details/44202491
框架
spring源码分析 https://blog.csdn.net/nuomizhende45/article/details/81158383 http://www.importnew.com/27469.html https://www.jianshu.com/p/dce21c3fc0b0
1. 收集 bean 描述信息
1.1 通过 XMLBeanDefinitionReader 读取 xml 信息, 封装成 GenericBeanDefinition 注册到 BeanFactory 里面
或 扫描指定目录下的所有类, 并将符合要求的类封装成 BeanDefinition, 并注册到 BeanFactory 里面
1.2 若遇到 特殊的命名空间, 则获取对应的 NamespaceHandler 来进行解析(PS: 如 MVC, TX, AOP 等)
2. 生成 bean
2.1 调用 BeanFactoryPostProcessor 来处理 BeanDefinition 里面的 ${占位符号}
2.2 调用 InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation (实例化前置函数) 来生成对象
postProcessBeforeInstantiation 主要是当程序中设置了 自定义的 customTargetSourceCreators 时创建 对应 Bean 的代理
2.3 通过反射生成对应的 bean
2.4 调用 MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition 来收集 Bean 里面的描述信息
(比如
AutowiredAnnotationBeanPostProcessor 收集 Autowired, Value 标注的属性/方法;
CommonAnnotationBeanPostProcessor 收集 PostConstruct, PreDestroy 标注的方法;
)
2.5 判断 bean 是否允许提早暴露+循环引用, 若是的话, 则直接将 bean 封装到 ObjectFactory 对象中
2.6 调用 InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation (实例化后置函数)
这个方法返回 true/false, 来决定是否将 XML 配置的 Bean 的属性运用到 Bean 上, 或 配置被 Autowired/Value 修饰的属性
2.7 调用 BeanPocessor.postProcessBeforeInitialization (初始化前置方法)
最常见的设置 Bean 实现的各种 Aware 方法就是通过 ApplicationContextAwareProcessor 来实现的
2.8 初始化 bean 的初始方法, 主要是两部分(1. XML 里面配置的 init 方法; 2. InitializingBean接口的afterPropertiesSet 方法)
2.9 调用 BeanProcessor.postProcessAfterInitialization 方法
Spring 中的 AOP 很多时候就是通过这个初始化后置方法实现代理类, 如 AnnotationAwareAspectJAutoProxyCreator(基于 Aspect 注解)
AspectJAwareAdvisorAutoProxyCreator(直接解析 <aop:config> 配置的信息)
2.10 将 Bean 封装成 DisposableBeanAdapter 装入到 能销毁的Bean 的 Map 中
springAOP源码 http://baijiahao.baidu.com/s?id=1596466083334197175&wfr=spider&for=pc https://blog.csdn.net/fighterandknight/article/details/51209822
spring 事务源码分析 https://blog.csdn.net/heroqiang/article/category/7303318?orderby=UpdateTime
spring Java配置解析原理 https://www.jb51.net/article/132888.htm
springmvc 启动过程http://www.jb51.net/article/114739.htm
mybatis 源码分析 https://www.jianshu.com/p/ec40a82cae28
MapperScannerConfigurer 代理源码 https://blog.csdn.net/A__Man/article/details/80383106 https://blog.csdn.net/jackyechina/article/details/52981667
spring5 flux https://blog.csdn.net/get_set/article/details/79480233 https://www.oschina.net/translate/spring-5-reactive-web-services
反应式编程 flux https://blog.csdn.net/simple_chao/article/details/73648238
mybatis整合spring使用sqlsession https://blog.csdn.net/qzc711/article/details/49307055 https://blog.csdn.net/lemonyfei/article/details/8925344 SqlSessionUtils.getSqlSession(sqlSessionFactory);
mybatis 属性注入无效 https://www.jianshu.com/p/ff38d96a18a7 https://blog.csdn.net/jackyechina/article/details/52957525
sqlsessionTemplate 源码 https://www.cnblogs.com/daxin/p/3544188.html
hibernate注解开发 注解放在get方法上 注明对应的列 这是改变get方法的名字同时也必须改变set的名字 因为hibernate会根据get方法名去拼接set方法名
hibernate注解开发@Column加在字段上,hibernate会反射拿到field设置值,加在get方法上才会调用set方法设置值
hibernate 注解关系映射 http://blog.csdn.net/jikak1153/article/details/43865701 多对多不声明关系对象列存在问题 http://blog.csdn.net/qwe6112071/article/details/51118838
spring aop 用|| && 链接多个拦截条件
如果发现@ConfigurationPropertie不生效,有可能是项目的目录结构问题,你可以通过@EnableConfigurationProperties(ConnectionSettings.class)来明确指定需要用哪个实体类来装载配置信息http://www.jianshu.com/p/df57fefe0ab7
当我们不为@Bean指定名字时,Spring会默认使用方法名作为Bean的名字
spring扫包也是会加载@configuration注解的
springScurity 获取认证失败后的错误信息 http://blog.csdn.net/sun1021873926/article/details/60332059
http://blog.csdn.net/jaune161/article/details/18361421 //默认重定向到的登陆失败页面并把错误信息放到session中 源码SimpleUrlAuthenticationFailureHandler
动态定时任务 http://blog.csdn.net/wwkms/article/details/48851005
spring的事务回滚
在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。
Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked(继承runtimeException)
如果遇到checked(继承Exception)意外就不回滚。
如何改变默认规则:
1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
spring排除扫描
@ComponentScan(basePackages={"spitter"},excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
<context:component-scan base-package="com.baobaotao">
<context:include-filter type="regex"
expression="com.baobaotao.service..*"/>
<context:exclude-filter type="aspectj"
expression="com.baobaotao.util..*"/>
</context:component-scan>
AOP的多个配置 http://blog.csdn.net/zhengchao1991/article/details/53391244
分布式&微服务
Redis:
常见问题 https://www.cnblogs.com/Survivalist/p/8119891.html
主从复制原理 https://blog.csdn.net/stubborn_cow/article/details/50442950
管道和事务 https://blog.csdn.net/xiaoliuliu2050/article/details/73294271
缓存与数据库一致性 https://blog.csdn.net/ZLHZHJ/article/details/80176988
缓存穿透,缓存击穿,缓存雪崩 https://blog.csdn.net/zeb_perfect/article/details/54135506
哨兵和数据丢失 https://blog.csdn.net/wang258533488/article/details/79352378
zookeeper:
disconf http://disconf.readthedocs.io/zh_CN/latest/
分布式锁 https://blog.csdn.net/peace1213/article/details/52571445
watcher机制原理 https://www.cnblogs.com/ainima/p/6331693.html https://blog.csdn.net/zdy0_2004/article/details/59133570
java api https://segmentfault.com/a/1190000012262940
感知节点变化 https://blog.csdn.net/qq_37334135/article/details/78076172
leader选举 https://blog.csdn.net/weixin_40083942/article/details/78484099
master选举 https://www.cnblogs.com/sky-sql/p/6804467.html
数据一致性 https://blog.csdn.net/liuhaiabc/article/details/70771322
dubbo源码分析 https://www.jianshu.com/p/c52fbaca7385
dubbo架构原理 https://blog.csdn.net/u013322876/article/details/72846054
tcc-transaction原理 https://www.processon.com/view/link/5addd123e4b04721d6357477
kafka高性能吞吐揭秘 https://segmentfault.com/a/1190000003985468
kafka详细说明 https://blog.csdn.net/ychenfeng/article/details/74980531
hash一致性算法 https://www.cnblogs.com/moonandstar08/p/5405991.html https://blog.csdn.net/WANGYAN9110/article/details/70185652
RocketMQ与Kafka特性对比 https://www.jianshu.com/p/a5484f565dd7?from=timeline
MappedByteBuffer https://www.jianshu.com/p/f90866dcbffc
tcp三次握手 https://blog.csdn.net/zqftisson/article/details/7616133
滑动窗口协议 https://blog.csdn.net/q1007729991/article/details/70142341
后退N帧协议 https://blog.csdn.net/qingkongyeyue/article/details/54970166
springboot整合mybatis 多数据源 https://blog.csdn.net/maoyeqiu/article/details/74011626 https://blog.csdn.net/twomr/article/details/79137056
springboot下同时使用freemarker和thmymeleaf freemarker优先级要高 http://blog.csdn.net/qq_15042899/article/details/72885889
nio编程 http://www.iteye.com/magazines/132-Java-NIO http://blog.csdn.net/yanmei_yao/article/details/8586199
dockerfile volume参数:
VOLUME 指定了临时文件目录为/tmp。其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,如果涉及到文件系统的应用就很有必要了。
/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
docker构建微服务 http://blog.csdn.net/forezp/article/details/70198649
docker容器互联 http://www.cnblogs.com/51kata/p/5276804.html
docker提供了一种机制,可以让一个容器和另一个容器很方便的连接起来。举例:
docker run --name test1 --link myweb:web -it ubuntu /bin/bash
上面命令创建了一个新的容器test1。 这里引入了一个新的标记 --link,其参数部分的myweb表示要连接的容器,web是要连接的容器的别名。
容器创建后,我们用 ping web命令发现能连接到myweb容器,这样因为用的不是ip地址,而是别名。这样即使myweb容器重启后,上面创建的test1容器对其连接的代码或脚本也不用修改。
假设myweb容器提供了web服务,容器内的端口是80.
这时在test1容器内可以用如下方式访问: curl http://web:80
显然,这种方式的优点是不再指定ip地址,即使 myweb容器重启后ip地址变了也没关系。
springboot importSelector原理:http://www.jianshu.com/p/7fd7eeeccad0 @AliasFor可以将组合注解的字段映射到具体注解中的字段
WebApplicationInitializer原理 http://blog.csdn.net/koflance/article/details/59233428
Oauth2 单点登录 http://blog.csdn.net/huxu981598436/article/details/67631878 http://jinnianshilongnian.iteye.com/blog/2038646 http://blog.csdn.net/jbjwpzyl3611421/article/details/51130030 http://www.importnew.com/24344.html
springcloud的httpbasic认证时浏览器提供的认证,feign提供的basic拦截器就是用来认证此认证的
ribbon feign hystrix 想要单独配置某一个,不能让配置类被扫描到
docker跨主机通信和网络 http://www.cnblogs.com/yy-cxd/p/6553624.html http://blog.csdn.net/zhangli_perdue/article/details/50441426 overlay方式:http://www.maiziedu.com/wiki/cloud/overlay/
分布式事务中间件 http://www.iocoder.cn/TCC-Transaction/console/ tcc-transaction:http://blog.csdn.net/l1028386804/article/details/73731363 http://www.phpxs.com/post/5894/
跨库的分布式事务 http://blog.csdn.net/guolong1983811/article/details/61414207
分布式系统事务 http://www.roncoo.com/article/detail/124243(*) http://blog.csdn.net/mine_song/article/details/64118963
spring+atomikos+jms 回滚消息队列 http://www.importnew.com/15812.html TCC:http://blog.csdn.net/l1028386804/article/details/73731363
elasticsearch http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html http://blog.csdn.net/sdksdk0/article/details/78469190
netty http://www.importnew.com/15656.html http://blog.csdn.net/haoyuyang/article/details/53243785
socket 选项 TCP NO DELAY 是指什么 http://wisebank.com/article/156
dubbo注册中心 http://blog.csdn.net/u011659172/article/details/51491518
java处理高并发高负载类网站的优化方法 http://mp.weixin.qq.com/s/qCy1YBpnuiP3uMuhGt2lHQ
storm trident state http://workman666.iteye.com/blog/2347168
序列化工具Protostuff https://www.cnblogs.com/549294286/p/4612601.html
跨域 http://igeekbar.com/igeekbar/post/875.htm
fastDFS https://zhuanlan.zhihu.com/p/32798888
linux之间共享目录挂载 http://blog.csdn.net/lp19861126/article/details/70211128
linux文件同步 https://www.cnblogs.com/hanxianlong/p/4583818.html
SpringBoot项目发布到docker的tomcat容器 http://blog.csdn.net/weixin_39800144/article/details/79213276 接入阿里OSS上传文件 http://blog.csdn.net/weixin_39800144/article/details/79287548
SpringBoot+Shiro学习之自定义拦截器管理在线用户(踢出用户)http://blog.csdn.net/qq_20954959/article/details/60468545
kafka tps https://blog.csdn.net/caisini_vc/article/details/48007297
分布式概念 https://blog.csdn.net/qq_25872739/article/details/59540320
mysql走向TiDB https://blog.csdn.net/D_Guco/article/details/80641236
微服务演变 https://blog.csdn.net/yp1125/article/details/79125477
CDN https://blog.csdn.net/qq_21891743/article/details/79642605
springboot不同开发环境的配置 https://blog.csdn.net/caideb/article/details/81164347
工具使用
git 密码存放位置 控制面板\所有控制面板项\凭据管理器
idea快捷键 https://blog.csdn.net/wei83523408/article/details/60472168
jdk9新特性 https://www.cnblogs.com/xiongxx/p/6734416.html https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-9/?cm_mmc=dwchina-_-devmkt-_-oschina-_-bloghome
模块化详细: https://www.cnblogs.com/lujiango/p/7852120.html http://www.importnew.com/24528.html
nginx反向代理(proxy_pass)tomcat导致session失效的问题解决 https://blog.csdn.net/libraryhu/article/details/52859243
java8 新特性 http://www.jb51.net/article/48304.htm
java8 optional用法 http://www.importnew.com/22060.html
<!-- webservice配置 -->
<bean id="photoService" class="com.pms.ws.impl.PhotoServiceImpl"></bean>
<jaxws:endpoint id="photoWS" implementor="#photoService" address="/photo"></jaxws:endpoint>
java8 方法与构造函数引用 方法的参数都得一致
//IConvert<String, Integer> convertor = (from) -> ( Integer.parseInt(from));
IConvert<String, Integer> convertor = Integer::parseInt; //静态方法
Something something = new Something();
IConvert<String, String> convertor = something::startWith;//对象方法
class Something{
String startWith(String s){
return String.valueOf(s.charAt(0));
}
}
js模块化 http://www.ruanyifeng.com/blog/2012/11/require_js.html 非AMD规范加载underscore不写则为如下exports名字,写了则在require引入是function中的名字
shim: {
'jquery.scroll': {
deps: ['jquery'],
exports: 'jQuery.fn.scroll'
}
}
require(['jquery', 'underscore', 'backbone'], function ($, _, Backbone){
// some code here
});
各大公司Java后端开发面试题总结 http://geek.csdn.net/news/detail/239424 http://blog.csdn.net/huangshulang1234/article/details/78878382
httpFileServer 远程下载文件
技术架构 http://geek.csdn.net/news/detail/243047
js promise用法 http://www.hangge.com/blog/cache/detail_1638.html
ES6新特性 http://blog.csdn.net/u012860063/article/details/62218564
ES7、8 特性 http://blog.csdn.net/xiangzhihong8/article/details/76133194?locationNum=6&fps=1
打造自己的JavaScript武器库 http://www.jqhtml.com/9521.html
excel工具类 http://blog.csdn.net/lovoo/article/details/52022527
内部类的公共方法在别的包也是无法访问的,因为内部类的访问范围是在包内,如beanutils 设置属性时,如何bean类是内部类就会提示找不到set方法
java实现附件预览(openoffice+swftools+flexpaper)
20个非常有用的Java程序片段 http://blog.csdn.net/qq_37267015/article/details/77368704
新技术 https://mp.weixin.qq.com/s/X33jjN5tMRmA7TJvqIZqbw
maven 模块打包 https://www.cnblogs.com/hiver/p/7850954.html