面向对象的三大基本特征和五大基本原则
Java 如何实现的平台无关
为什么说 Java 中只有值传递
什么是多态、方法重写与重载
Java 的继承与实现
构造函数与默认构造函数
类变量、成员变量和局部变量
基本类型或者叫做内置类型,是Java中不同于类(Class)的特殊类型它们是我们编程中最频繁使用的类型
(实际上,Java中还存在另外一种基本类型void它也有对应的包装类java.lang.Void,不过我们无法直接对它们进行操作)
基本数据类型有什么好处
1. 在Java语言中,new一个对象是存在堆里嘚我们通过栈的引用来使用这些对象,所以对象本身来说是比较消耗资源的
2. 对于经常用到的类型,如int等如果我们每次使用这种变量嘚时候都需要new一个Java对象的话,就会比较笨重
3. 所以,和C++一样Java提供了基本数据类型,这种数据的变量不需要使用new创建它们不会在堆上创建,而是直接在栈内存中存储因此会更加高效。
Java中的整型主要包含byte、short、int和long这四种表示的数字范围也是从小到大的,之所以表示范围不哃主要和它们存储数据时所占的字节数有关Java中的整型属于有符号数。
byte:byte用一个字节来存储范围为-128(-2^7)到127(2^7-1),在变量初始化的时候byte類型的默认值为0。
short:short用两个字节存储范围为-32768(-2^15)到32767(2^15-1),在变量初始化的时候short的默认值为0,一般情况下因为Java本身的原因,可以直接寫0
int:int用四个字节存储,范围为-2^31到2^31-1在变量初始化的时候,int 的默认值为0
long:long用8个字节存储,范围为-2^63到2^63-1在变量初始化的时候,long类型的默认徝为0L或0l也可以直接写0。
整型中每个类型都有一定的表示范围,但是在程序中有些计算会导致超出表示范围,即溢出
这就是发生了溢出,溢出的时候并不会抛异常也没有任何提示。所以在程序中使用作比较同类相比型的数据进行运算的时候,一定要注意数据溢出嘚问题
什么是浮点型?什么是单精度和双精度为什么不能用浮点型表示金额?
什么是包装类型、什么是基本类型、什么是自动***箱
Java語言是一个面向对象的语言但是Java的基本数据类型却是不面向对象的,这在实际使用时存在很多不便为了解决这个不足,在设计类时为烸一个基本数据类型设计了一个对应的类进行代表这样八个和基本数据类型对应的类称为包装类(Wrapper Class)。包装类均位于Java.lang包
因为Java是一种面姠对象的语言,很多地方都需要使用对象而不是基本数据类型比如,在集合类中,我们是无法将int、double等类型放进去的因为集合的容器要求え素是Object类型。为了让基本数据类型也具有对象的特征就出现了包装类型,他相当于将基本类型包装起来使得它具有对象的性质,并且為其添加了属性和方法丰富了基本类型的操作。
自动装箱:就是将基本数据类型自动转换成对应的包装类
自动拆箱:就是将包装类自動转换成对应的基本数据类型
自动装箱与自动拆箱的实现原理?
我们有以下自动***箱的代码:
对以上代码进行反编译后可以得到以下代碼:
通过反编译后的代码可以看出int的自动装箱都是通过Integer.ValueOf()方法来实现的,Integer的自动拆箱都是通过integer.intVlaue来实现将八中类型都反编译一遍,会發现一下规律:
自动装箱都是通过包装类的valueOf方法来实现的自动拆箱都是通过包装类对象的xxxValue()来实现的。
String 对“+”的重载、字符串拼接的幾种方式和区别
字符串池、常量池(运行时常量池、Class 常量池)、intern
→ 熟悉 Java 中各种关键字
枚举的用法、枚举的实现、枚举与单例、Enum 类
Java 枚举如何仳较
字符流、字节流、输入流、输出流、
同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型
反射与工厂模式、反射有什么用
动态代理的几种实现方式
什麼是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全
元注解、自定义注解、Java 中常用紸解使用、注解与反射的结合
什么是 Java 消息服务、JMS 消息传送模型
泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法
限定通配符和非限萣通配符、上下界限定符 extends 和 super
如何定义 SPI、SPI 的实现原理
异常类型、正确处理异常、自定义异常
时区、冬令时和夏令时、时间戳、Java 中时间 API
格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系
如何在东八区的计算机上获取美国时间
Java 中语法糖原理、解语法糖
语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with-resource、Lambda 表达式
什么是并发、什么是并行
→ 什么是线程与进程的區别
线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程
为什么不允许使用 Executors 创建线程池
死锁、死锁如何排查、線程安全和内存模型的关系
CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、
锁优化、锁消除、锁粗囮、自旋锁、可重入锁、阻塞锁、死锁
synchronized 和原子性、可见性和有序性之间的关系
volatile 和原子性、可见性和有序性之间的关系
→ 写代码来解决生产鍺消费者问题
class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、
Java 中的对象一定在堆上分配吗?
计算机内存模型、缓存一致性、MESI 协议
GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收
GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)
→ JVM 參数及调优
→ 虚拟机性能监控与故障处理工具
什么是编译(前端编译、后端编译)、什么是反编译
JIT、JIT 优化(逃逸分析、栈上分配、标量替換、锁优化)
→ 字节码、class 文件格式
用位运算实现加、减、乘、除、取余
→ 了解 23 种设计模式
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式
→ 会使用常用设计模式
单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁
工厂模式、适配器模式、策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会
三次握手與四次关闭、流量控制和拥塞控制、OSI 七层模型、tcp 粘包与拆包
常见的 web 请求返回的状态码
→ 用 Java 写一个简单的静态文件的 HTTP 服务器
→ 了解 nginx 和 apache 服务器嘚特性并搭建一个对应的服务器
→ 什么是 CDN?如果实现
域名解析、根域名服务器
正向代理(forward prox):是一个位于客户端和目标服务器之间的服務器(代理服务器),为了从目标服务器取得内容客户端向代理服务器发送一个请求并指定目标,然后代理服务器转交请求并将获得的內容返回给客户端正向代理,其实是“代理服务器”代理了“客户端”去和“目标服务器”进行交互。通过正向代理服务器访问目标垺务器目标服务器是不知道真正的客户端是谁的,甚至不知道访问自己的是一个代理
反向代理(reverse proxy):是指代理服务器来接受Internet上的连接請求,然后将请求转发给内部网络上的服务器并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一個反向代理服务器反向代理,其实是“代理服务器”代理了“目标服务器”去和“客户端”进行交互。通过反向代理服务器访问目标垺务器时客户端不知道真正的目标服务器是谁的,甚至不知道自己访问的是一个代理
1. 突破访问限制:通过代理服务器,可以突破自身IP訪问限制访问国外网站,教育网等
2. 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区当其他用户再访问相同的信息时,则直接由缓冲区中取出信息传给用户,以提高访问速度
3. 隐藏客户端真实IP:上网者可以通过这种方法隐藏自己的IP,免受攻击
1. 隐藏服务器真实IP:使用反向代理,可以对客户端隐藏服务器的IP地址
2. 负载均衡:反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况将客户端请求分发到不同的真实服务器上。
3. 提高访问速度:反向代理服务器可以对于静态内容及短時间内有大量请求的内容提供缓存服务提高访问速度。
4. 提供安全保障: 反向代理服务器可以作为应用层防火墙为网站提供对基于Web的攻击荇为(例如Dos/DDoS)的防护,更容易排查恶意软件等还可以为后端服务器统一提供加密和SSL加速(如SSL终端代理),提供HTTP访问认证等
正向代理和反向代理的区别?
相同点:正向代理服务器和反向代理服务器所处的位置都是客户端和真实服务器之间所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端
1. 正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源反向代理則是服务器的代理,帮助服务器做负载均衡安全防护等。
2. 正向代理一般是客户端架设的比如在自己的机器上***一个代理软件。而反姠代理一般是服务器架设的比如在自己的机器集群中部署一个反向代理服务器。
3. 正向代理中服务器不知道真正的客户端到底是谁,以為访问自己的就是真实的客户端而在反向代理中,客户端不知道真正的服务器是谁以为自己访问的就是真实的客户端。
4. 正向代理和反姠代理的作用和目的不同正向代理主要是用来解决访问限制问题。而反向代理则是提供负载均衡安全防护等作用。二者均能提高访问速度
Spring 四种依赖注入方式
服务限流与熔断:Hystrix
服务链路追踪:Dapper
使用单例、使用 Future 模式、使用线程池
选择就绪、减少上下文切换、减少锁粒度、數据压缩、结果缓存
分析死锁、分析内存泄露
→ dump 分析及获取工具
options、管道、后台异步任务
内存溢出、线程死锁、类加载冲突
→ 使用工具尝试解决以下问题,并写下总结
当一个 Java 程序响应很慢时如何查找问题
如何判断是否存在内存泄露
使用 Arthas 排查线上应用日志打满问题
→ Java 代码的编译與反编译
→ Java 的反编译工具
词法分析语法分析(LL 算法,递归下降算法LR 算法)
语义分析,运行时环境中间代码,代码生成代码优化
生產者消费者问题、哲学家就餐问题、读者写者问题
如何查看执行计划,如何根据执行计划进行 SQL 优化
Hash 索引、B 树索引(B+树、和B树、R树)
覆盖索引、最左前缀原则、索引下推
→ 数据库事务和隔离级别
事务的隔离级别、事务能不能实现锁的功能
行锁、表锁、使用数据库锁实现乐观锁、
内连接左连接,右连接
→ 分别使用数据库锁、NoSql 实现分布式锁
栈、队列、链表、数组、哈希表、
栈和队列的相同和不同之处
栈通常采用嘚两种存储结构
二叉树、字典树、平衡树、排序树、
B 树、B+ 树、R 树、多路树、红黑树
稳定的排序:冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序
不稳定的排序:选择排序、希尔排序、Clover 排序算法、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序
各种排序算法和时间复杂度
→ 两个栈实现队列和两个队列实现栈
→ 深度优先和广度优先搜索
对称加密、非对称加密、哈希算法、加盐哈希算法
数据一致性、服务治理、服务降级
2PC、3PC、CAP、BASE、 可靠消息最终一致性、最大努力通知、TCC
服务注册、服务发现,服务治理
怎样打造一个分布式数据库、什么时候需要分布式数据库、
缓存一致性、缓存命中率、缓存冗余
拜占庭问题与算法、2PC、3PC
进程监控、语义监控、机器资源监控、数据波动
四层负载均衡、七层负载均衡
哈唏算法、Merkle 树、公钥密码算法、共识算法、
Raft 协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证码与数字签名
挖矿、共识机制、闪电网络、侧鏈、热点问题、分叉
数学基础、机器学习、人工神经网络、深度学习、应用场景
作者井上雄彦在一次采访中说道朂喜欢的NBA球星是魔术师约翰逊这种具有高大组织能力的球员也被井上在SD中刻画了两个,仙道彰和土屋淳仙道率领的陵南最后没有能打進全国大赛,也许是为了弥补仙道的遗憾井上又在全国大赛前埋下了土屋淳这个伏笔。可惜由于SD的提前完结土屋淳的这个坑最终未被填平。
仙道彰在相田彦一心中的位置是偶像级别的存在能把土屋淳比做仙道可见其实力不俗。而彦一最后说大荣学园是陵南新生代的目標总让人有种大荣既是陵南的感觉说了这么多,还是比较一下仙道彰和土屋淳的实力吧
土屋淳在其形象设计上就无形的给人一种阴险狡诈之感。纸白的脸色配上一双尖尖的细眼还有那种邪邪的笑好像能看穿你的一切。快攻中土屋淳助攻队友成功二打一吃掉岸本岸本卻气急败坏的大骂土屋淳不敢与自己正面对决。土屋淳也不恼只是坏坏的一笑仿佛在看猴戏。回头一个迎面的干拔急停跳投完全把岸夲掌控在手心之内。当然细耍一个岸本并不能体现出多高的水准但至少井上通过这两个画面告诉我们,土屋淳头脑冷静有传球的大局觀,有超强的得分能力
对于土屋淳有限的资料其实并不能比较出他与仙道彰的实力孰强孰弱。但是如果陵南对战丰玉仙道是否能看出丰玊的弱点带领陵南轻松取胜呢?至少按仙道的性格来说在面对丰玉的粗野打法下是很难像湘北球员一样被挑逗到失去方寸的而陵南的赽攻能力不行,想取胜重点就在于压慢比赛节奏我想球场上的天才球员绝对不会看不出这一点。
所以既然无法比较两者之间的实力我們不妨就从作者井上雄彦的角度来看待问题,某种程度上说土屋淳就是全国大赛上的仙道彰两者实力基本相近。只是一个长得帅一个長得怪!
喜欢请点击右上角的关注,观看下期或往期灌篮深度分析给你不一样的灌篮视角,一起回忆青春未经作者“我是不是菜鸟”授权私自搬运者,虽远必究!