1.35.6.4.1. 学习
训练营第一天 1、synchronized关键字的字节码原语 2、volatile关键字的字节码原语 3、synchronized与volatile的硬件级实现 4、无锁、偏向锁、轻量级锁、重量级锁的升级过程 5、内存屏障的基本概念 6、JVM规范如何要求内存屏障 7、硬件层级内存屏障如何帮助java实现高并发 8、面试第4题(线程间通讯)的8种解法 9、作业
训练营第二天 1、线程池的学与思 2、使用线程池的好与不好 3、为什么阿里开发手册建议自定义线程池 4、自定义线程池的最佳实践 5、常见线程池类型与应用场景 1)CachedPool 2)FixedThreadPool 3)ScheduledPool 4)WorkStealingPool 5)ForkJoinPool 6、比线程更牛X的线程,压测结果展现纤程的威力 7、总结
一个小伙伴最近参加某个一线互联网公司的面试,被问了以下问题,看看大家能否答出来: (1)synchronized的CPU原语级别是如何实现的? (2)一千万个数,如何高效求和。 (3)不用数学库,求2开平方的值,精确到小数点儿后10位。 (4)线程A不断打印1-10的数字,打印到第5个数字时通知线程B,请完成编码。 (5)下列三种业务,应该如何使用线程池: 高并发、任务执行时间短的业务 并发不高、任务执行时间长的业务 并发高、业务执行时间长的业务 (6)你如何来设计12306网站,能够撑住最高百万级别TPS(淘宝最高54万TPS)?
微软 Microsoft Azure
谷歌云平台 Google Cloud Platform (GCP)
亚马逊Amazon Web Services (AWS)
阿里云
Google Kubernetes Engine(GKE)
加解密、填充对齐等,证书等,参考网上在线加解密参数
算法
设计模式
操作系统
linux、shell、go、c++、python
Ruby on Rails(官方简称为 Rails,亦简称为 RoR),是一个使用 Ruby 语言写的开源 Web 应用框架,严格按照 MVC 结构开发。
https://rubyonrails.org/
狼人杀
麻将、
健身常识
医学常识
看手机上的待办事项
德州扑克
Jupyter Notebook
有个 斯蒂芬周都博客,里面全是mac主流软件都破解版
京东的网关
Java面试视频链接:https://pan.baidu.com/s/1OTzaoG456DtwqB-dGPZmMg
提取码:8nm1
这是我们的免费直播每天晚上八点到十点都有直播课程https://ke.qq.com/course/384333?tuin=2f51f3e9
点击一下即可报名,报名成功截图给我下哦
工作流
https://www.flowable.org/
https://github.com/flowable/flowable-engine
好文章
https://github.com/doocs
https://github.com/apachecn/awesome-algorithm
Spring Cloud第一代和第二代的组件组合汇总,如下表所示。
Spring Cloud第一代 Spring Cloud第二代
网关 Spring Cloud Zuul Spring Cloud Gateway
注册中心 eureka(不再更新),Consul,ZK 阿里Nacos,拍拍贷radar等可选
配置中心 spring cloud config 阿里Nacos,携程Apollo,随行付Config Keeper
客户端软负载均衡 Ribbon spring-cloud-loadbalancer
熔断器 Hystrix spring-cloud-r4j(Resilience4J),阿里Sentinel
【【【每天学习的知识点】】】
Tomcat生产部署:配置详解、启动参数调优及JVM参数优化
缓存热点Key、大Value
数据库分页重复和分页实现
数据库深度分页优化
Java泛型的类型擦除和Java语法糖(12个)
多线程,到底该设置多少个线程?参考Redis、Nginx;为什么他们会那么快呢
jetty的使用
各种编码ASCII、GB2312、GBK、unicode、utf-8
ASCII流程图
Linux命令:du、df、tar、awk等
SSH、SCP、sftp等
动态代理和静态代理
热部署和热加载
SSO实现OpenID和OAuth
1、SSO实现OPenID和OAuth
2、各种编码详解-ASCII、GB2312、UTF-8
3、ASCII流程图
四种授权类型(authorization grant),即四种颁发令牌的方式:1、授权码(authorization code)方式、2、隐藏式(implicit)、3、密码式(password)、4、客户端凭证(client credentials)
G1和CMS区别对比
逃逸分析与TLAB、内存泄漏
AQS(AbstractQueuedSynchronizer):一个int状态位和一个有序队列来配合完成
直接内存详解:分配和回收
1.35.6.4.1.1. Linux探秘之用户态与内核态
数据库:范式、索引、优化、锁、oracle、mysql、mybatis
设计模式quickstart-design-pattern
数据结构和算法:树的类型、复杂度、排序算法、查找算法
分布式:分布式事务与一致性算法.md、分布式锁,分布式缓存、分布式主键、分布式事务、对CAP理论、Paxos/Raft算法、高可用架构
HTTP:OSI七层、TCP、http连接、Https
限流:高并发流量限制(计数器、漏桶、令牌桶):限流(过载保护)
BloomFilter布隆过滤器(是BitMap位图的变形)(变形CountingBloomFilter )CuckooFilter布谷鸟哈希
缓存算法(页面置换算法)-FIFO、LFU、LRU
3672234979杨子付
5、常用框架
消息:消息:Activemq、Rocketmq、kafka、MQTT
缓存:Redis、memcached、什么是缓存击穿 如何避免,
注册中心的:zookeeper、consul、etcd
容器相关:docker、kubernetes、istio
通讯:netty
rpc微服务框架:Dubbo、SpringCloud
Spring:Springframe、Springboot、SpringCloud
数据库:mybatis、hibernate
分布式:分布式事务与一致性算法.md、分布式锁,分布式缓存、分布式主键
惊群问题:定义,解决:计算机常见专业名词.md
linux熟悉:进程、线程和轻量级进程:计算机常见专业名词.md
线程切换、内核线程和用户线程、零拷贝等解释:https://blog.csdn.net/tianyue168/article/details/7403693
6、开发项目:
自己做过的项目:网关gateway、消息组件、配置中心amber、缓存aicahe,查看示例代码
7、加解密
单向加密和双向加密(对称加密和非对称加密)
单向加密(信息摘要):MD5、SHA
对称加密:DES、3DES、AES
非对称加密:RSA、DSA、ECDSA
查看项目quickstart-crypto
10、WebSocket和WebService
17、SSO实现OpenID和OAuth.md
其他框架:
字节码框架asm、设计模式、disruptor、fastdfs、guava、jvm序列化框架、yaml框架、xml框架、web
String字符串压缩、reflect反射、reactivex、quartz、proxy代理、logging框架、linux相关、json、jfinal、
javase、uuid、文档、
消息特性
jmx
锁
负载均衡
1.TCP/IP 三次握手 四次挥手
2.Http的格式说明
3.状态码说明
4.进程间通讯方式(IPC)
5.数据库隔离级别,索引类别,oracle的SID 实例
6.启动一个包含main方法的类时,输出字符,整个启动到输出的详细流程
首先java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这才是真正的 Java 虚拟机器 , 最后加载动态库,激活 Java 虚拟机器。虚拟机器激活以后,会先做一些初始化的动作,比如说读取系统参数等。一旦初始化动作完成之后,就会产生第一个类加载器―― Bootstrap Loader
1.加载字节码(启动类加载器,扩展类,应用程序类,自定义加载器)
2.验证格式
3.准备(分配内存)
4.解析(解析阶段是虚拟机将常量池中的符号引用转化为直接引用的过程)
5.初始化
整个类加载过程中,除了在加载阶段用户应用程序可以自定义类加载器参与之外,其余所有的动作完全由虚拟机主导和控制。到了初始化才开始执行类中定义的Java程序代码(亦及字节码),但这里的执行代码只是个开端,它仅限于
7.双亲委派
8.classloader的功能和工作模式
9.synchronized和lock的用法区别 各自底层原理
synchronized:
对象级别的同步块,底层包含monitorenter和monitorexit指令
方法级别同步,底层是 ACC_SYNCHRONIZED 标识来判断
Java虚拟机对synchronized的优化
锁的状态总共有四种,无锁状态、偏向锁、轻量级锁和重量级锁。随着锁的竞争,锁可以从偏向锁升级到轻量级锁,再升级的重量级锁,但是锁的升级是单向的,也就是说只能从低到高升级,不会出现锁的降级,关于重量级锁,前面我们已详细分析过,下面我们将介绍偏向锁和轻量级锁以及JVM的其他优化手段,这里并不打算深入到每个锁的实现和转换过程更多地是阐述Java虚拟机所提供的每个锁的核心优化思想,毕竟涉及到具体过程比较繁琐,如需了解详细过程可以查阅《深入理解Java虚拟机原理》。
lock:
10.分布式锁
11.如何设计线程池 需要什么特性 怎么扩容 缩容 如何去取资源 分配资源
12.spring中的transactional注解,requestMapping注解的实现原理
13.springMvc原理 如何集成web
14.什么是缓存击穿 如何避免
15.自己做的项目对自己帮助很大的方面 成长的方面
16.如何排查oom
问题:
Redis Bitmap是什么?
HikariCP连接池(号称性能最好的JDBC连接池:HikariCP)?
springboot自动启动类?
spring常用的接口和类,实现原理(在什么时候初始化,什么时候注入,什么时候调用)?
GC,问怎么标记回收对象的,从GCROOT不可达的对象(根据四种引用关系,强软弱虚),GCROOT哪里来的(哪些可以是GCROOT)?
java提供finalize()方法?GC和finalize()方法都是不可靠的
什么时候一个对象会被GC?
为什么要在这个时候对象才会被GC?
GC策略都有哪些分类?
这些策略分别都有什么优劣势?都适用于什么场景?
给你举个实际的场景,让你选择一个GC的策略?为什么要选择这个策略?
什么是gc,什么是cms算法?
cms算法实现原理?整个过程是怎么样的?
怎么避免full gc?
java g1垃圾收集器?
类加载机制的相关问题:
java的类加载器都有哪些?
每个类加载器都加载哪些类?
这些类加载器之间的父子关系是怎么样的?
回答的时候可能会提到双亲委派模型,双亲委派模型是什么?
java的类加载器为什么要使用双亲委派模型?
如何自定义自己的类加载器?自己的类加载器和java自带的类加载器关系如何处理?
bootstrap
Extend
app
self defined
内存的相关问题:
内存分为哪几部分?这些部分分别都存储哪些数据?
一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
内存的哪些部分会参与GC的回收?
java的内存模型是怎么设计的?为什么这么设计?
java线程、java线程池、java集合、java队列、java正则表达式、java native方法、JAVA泛型
jdk和jre的区别
java、Spring中的ServletContext相关
Spring的DispacherServlet和ContextLoaderListener中的WebApplicationContext的关系
获取spring的ApplicationContext几种方式:直接创建(2种),工具类WebApplicationContextUtils,extends或者implements(ApplicationObjectSupport就是实现ApplicationContextAware)
java nio的selector 和linux的epoll select,类似与epoll或者java里面的selector
ZeroCopy和mmap思想
集合重写写equals,就必须重写hashCode?使用hash表的时候需要重写
Java基础:概述、语言基础、OO、Exceptio处理、Array、常用Class、集合、IO与文件、多线程、反射
1.项目介绍,从业务出发,自顶向下,模块职责清晰,确保面试官能听懂,反映出对业务的抽象总结
2.项目亮点,体现业务价值,解决方法包括但不限于抽象建模、方法论、工具等,如果涉及技术要展示出你对这项技术的理解,反应你的学习热情与计算机基础,如多线程、缓存、索引、事务等
3.基础知识,通用的东西要掌握好,如java集合、多线程、jvm几乎是必考,如果简历重点提了某项组件最好了解下原理,比如mysql,把索引、事务、锁的原理了解好
4.工程实践,缓存、可用性、微服务、高并发、扩展性、性能优化、幂等、质量保证等问题,如果没有思路可以从自己系统出发
5.系统设计,让你设计一种常见的系统,其实也是反映了你在1、2的能力,leetcode上有一道系统设计题可以搜下它的结题思路,总结好思路自己尝试设计微信抢红包、电商秒杀、餐厅点餐、直播等系统,这种问题大概率会问道
6.算法,刷题练手,注意代码风格、边界条件的判断
7.二三面大概率会问到,你对什么感兴趣、最近在学习什么,然后让你介绍
面试题:
1、nio、Bio,aio的区别,大概机制,接口
2、数据库,innobd,隔离级别,行级锁
3、分布式
4、类加载器和双亲委派机制,何时破坏双亲委派机制
5、几种垃圾回收器
6、java8新特性,lamda,函数接口
7、多线程:创建线程池,两个线程一个初始化,一个循环,改变一个值,并发包下接口类
8、java虚拟机的内存模型,内存工作方式
9、spring 、aop、ioc
10、二叉树算法
11、MySQL的事务级别,mybatis一个mapper实现两个sql
12、多线程,100个子线程,执行完成,将结果返回主线程
13、如何在大量数据中查找某一段的数据,不用limit
14、dubbo的原理,结构
15、整体介绍负载均衡架构
16、多线程的好处?一定能加快运行速度么?因为线程切换也是需要时间的,就跟自旋锁和互斥锁的效率一样,线程睡眠和唤醒也是需要时间和消耗资源的。
17、Integer和int类型,哪个放在堆内存?哪个在栈内存?
18、堆里面和栈内存,分别是什么时候回收?
19、outofmemory的问题,怎么定位?
20、常用有哪些设计模式?
21、一致性hash的实现原理
22、数据库索引和主键的区别:
对MySQL的了解,和oracle的区别
对设计模式的看法和认知
有哪些设计模式
如何实现分布式缓存
多线程如何避免死锁
关于树的算法题-二叉树的锯齿形层次遍历:二叉树的锯齿形层次遍历http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/
Java的垃圾回收机制
对Runtime的了解
如何进行自学
阅读过那些书籍
第一个项目:
项目最终实现效果
项目具体部分使用的设计模式并简述选择理由
项目有何需改进之处并初拟改进方案
第二个项目:
项目运行过程中成员是否曾就某一点发生争执?作为Leader你是如何解决的?具体事例?
数据库的范式
JVM内存模型及调优
浏览器的缓存机制
如何解决高并发问题?是否进行过相应程序的编写?
LintCode 算法题 - 最小子串覆盖。原题链接:最小子串覆盖http://www.lintcode.com/zh-cn/problem/minimum-window-substring/
想问的问题
应用容器:Spring-Boot、Docker方向,自诊断、开发效率、模块化
· RPC链路:链路跟踪、服务治理、动态流量管理、分布式调度
1.35.6.4.1.2. · 高可用方向:异地容灾、环境隔离/切换
hql学习
Zuul代码
netty使用:常用的编解码
RXjava学习,RxJava是基于响应式编程思想,实现并扩展了观察者模式,可以进行异步操作的库
completablefuture原理解析,异步编程类
Lambda表达式和函数式接口,Lambda表达式3种,函数式接口JDK8内置4类
StreamsAPI,创建、转换、聚合Reduce
RP、FP、FRP区别,反应式编程、函数式编程、函数反应式编程
Fork/Join框架
restful接口是什么
边缘计算
guice,DI注入管理
lettuce,Redis客户端异步反应式编程
caffeine,本地JVM缓存
guava,本地JVM缓存
android的webview
免费的程序书籍https://github.com/EbookFoundation/free-programming-books Head First」编程系列丛书
有赞 https://tech.youzan.com/youzan-service-regression-test-platform/
https://www.guru99.com/java-tutorial.html https://howtodoinjava.com/security/aes-256-encryption-decryption/
Github装逼指南——Travis CI 和 Codecov https://segmentfault.com/a/1190000004415437