前言
作为21世纪的程序员,Java架构师应该是大家的一个职业目标了吧。要成为Java架构师,首先熟练使用各种框架,并知道它们实现的原理。

Jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;什么对象池,连接池,线程池...java反射技术,写框架必备的技术, 总之一句话越基础的东西越重要,很多人认为自己会用它们写代码了,其实仅仅是知道如何调用api而已,离会用还差的远。互联网发展迅速的时代,只能跟上时代的进步,才不会被淘汰。
纯粹是常用的技术,还有很多自己慢慢去摸索吧;因为要知道的东西很多,所以要成为一名合格的架构师,必须要有强大的自学能力,没有人会手把手的教给你所有的东西。想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。

基础

  1. Java线程的状态
  2. 进程和线程的区别,进程间如何通讯,线程间如何通讯
  3. HashMap的数据结构是什么?如何实现的。和HashTable,ConcurrentHashMap的区别
  4. Cookie和Session的区别
  5. 索引有什么用?如何建索引?
  6. ArrayList是如何实现的,ArrayList和LinkedList的区别?ArrayList如何实现扩容。
  7. equals方法实现
  8. 面向对象
  9. 线程状态,BLOCKED和WAITING有什么区别
  10. JVM如何加载字节码文件
  11. JVM GC,GC算法。
  12. 什么情况会出现Full GC,什么情况会出现yong GC。
  13. JVM内存模型
  14. Java运行时数据区
  15. 事务的实现原理
    16.drop,delete与truncate的区别

相同点:
truncate和不带where子句的delete,以及drop都会删除表内的数据
不同点:

  • truncate会清除表数据并重置id从1开始,delete就只删除记录,drop可以用来删除表或数据库并且将表所占用的空间全部释放
  • truncate和delete只删除数据不删除表的结构。drop语句将删除表的结构被依赖的约(constrain),触发器(trigger),依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
  • 速度上一般来说: drop> truncate > delete
  • 使用上,想删除部分数据行用 delete,想删除表用 drop,想保留表而将所有数据删除,如果和事务无关,用truncate即可。如果和事务有关,或者想触发trigger,还是用delete。
  • delete是DML语句,不会自动提交。drop/truncate都是DDL语句,执行后会自动提交。

2.mysql里记录货币用什么字段类型好
NUMERIC 和DECIMAL 类型被MySQL实现为同样的类型,这在SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。
DECIMAL和NUMERIC值作为字符串存储,而不是作为二进制浮点数,以便保存那些值的小数精度。
3.MySQL中myisam与innodb的区别

  • InnoDB支持事务,而MyISAM不支持事务
  • InnoDB支持行级锁,而MyISAM支持表级锁
  • InnoDB支持MVCC, 而MyISAM不支持
  • InnoDB支持外键,而MyISAM不支持
  • InnoDB不支持全文索引,而MyISAM支持。
  • InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, myisam 支持
  • InnoDB表支持多种行格式, myisam 不支持
  • InnoDB是索引组织表, myisam 是堆表

框架

  1. 看过哪些开源框架的源码
  2. 为什么要用Redis,Redis有哪些优缺点?Redis如何实现扩容?
  3. Netty是如何使用线程池的,为什么这么使用
  4. 为什么要使用Spring,Spring的优缺点有哪些
  5. Spring的IOC容器初始化流程
  6. Spring的IOC容器实现原理,为什么可以通过byName和ByType找到Bean
  7. Spring AOP实现原理
  8. 消息中间件是如何实现的,技术难点有哪些

技术深度

  1. 有没有看过JDK源码,看过的类实现原理是什么。
  2. HTTP协议
  3. TCP协议
  4. 一致性Hash算法
  5. JVM如何加载字节码文件
  6. 类加载器如何卸载字节码
  7. IO和NIO的区别,NIO优点
  8. Java线程池的实现原理,keepAliveTime等参数的作用。
  9. HTTP连接池实现原理
  10. 数据库连接池实现原理
  11. 数据库的实现原理
    数据结构

• 在 JDK1.8 中,HashMap 是由数组+链表+红黑树构成
• 当一个值中要存储到 HashMap 中的时候会根据 Key 的值来计算出他的 hash,通过 hash 值来确认存放到数组中的位置,如果发生 hash 冲突就以链表的形式存储,当链表过长的话,HashMap 会把这个链表转换成红黑树来存储。

我个人觉得这样设计有以下几个好处:

  1. 当数组长度为 2 的幂次方时,可以使用位运算来计算元素在数组中的下标

HashMap 是通过 index=hash&(table.length-1) 这条公式来计算元素在 table 数组中存放的下标,就是把元素的 hash 值和数组长度减1的值做一个与运算,即可求出该元素在数组中的下标,这条公式其实等价于 hash%length,也就是对数组长度求模取余,只不过只有当数组长度为 2 的幂次方时,hash&(length-1) 才等价于 hash%length,使用位运算可以提高效率。

  1. 增加 hash 值的随机性,减少 hash 冲突

如果 length 为 2 的幂次方,则 length-1 转化为二进制必定是 11111……的形式,这样的话可以使所有位置都能和元素 hash 值做与运算,如果是如果 length 不是 2 的次幂,比如 length 为 15,则 length-1 为 14,对应的二进制为 1110,在和 hash 做与运算时,最后一位永远都为 0 ,浪费空间。
系统架构

  1. 如何搭建一个高可用系统
  2. 哪些设计模式可以增加系统的可扩展性
  3. 介绍设计模式,如模板模式,命令模式,策略模式,适配器模式、桥接模式、装饰模式,观察者模式,状态模式,访问者模式。
  4. 抽象能力,怎么提高研发效率。
  5. 什么是高内聚低耦合,请举例子如何实现
  6. 什么情况用接口,什么情况用消息
  7. 如果AB两个系统互相依赖,如何解除依赖
  8. 如何写一篇设计文档,目录是什么
  9. 什么场景应该拆分系统,什么场景应该合并系统
  10. 系统和模块的区别,分别在什么场景下使用

分布式

  1. 分布式事务,两阶段提交。
  2. 如何实现分布式锁
  3. 如何实现分布式Session
  4. 如何保证消息的一致性
  5. 负载均衡
  6. 正向代理(客户端代理)和反向代理(服务器端代理)
  7. CDN实现原理
  8. 怎么提升系统的QPS和吞吐量

Redis 为何这么快

面试官: Redis 作为缓存大家都在用,那 Redis 一定很快咯?
我: 当然了,官方提供的数据可以达到 100000+ 的 QPS(每秒内的查询次数),这个数据不比 Memcached 差!
面试官: Redis 这么快,它的“多线程模型”你了解吗?(露出邪魅一笑)
我: 您是想问 Redis 这么快,为什么还是单线程的吧。Redis 确实是单进程单线程的模型,因为 Redis 完全是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。
既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章的采用单线程的方案了(毕竟采用多线程会有很多麻烦)。
面试官: 嗯,是的。那你能说说 Redis 是单线程的,为什么还能这么快吗?
我: 可以这么说吧,总结一下有如下四点:

  • Redis 完全基于内存,绝大部分请求是纯粹的内存操作,非常迅速,数据存在内存中,类似于 HashMap,HashMap 的优势就是查找和操作的时间复杂度是 O(1)。
  • 数据结构简单,对数据操作也简单。
  • 采用单线程,避免了不必要的上下文切换和竞争条件,不存在多线程导致的 CPU 切换,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有死锁问题导致的性能消耗。
  • 使用多路复用 IO 模型,非阻塞 IO。

Redis 和 Memcached 的区别

面试官: 嗯嗯,说的很详细。那你为什么选择 Redis 的缓存方案而不用 Memcached 呢?
我: 原因有如下四点:

  • 存储方式上: Memcache 会把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis 有部分数据存在硬盘上,这样能保证数据的持久性。
  • 数据支持类型上: Memcache 对数据类型的支持简单,只支持简单的 key-value,,而 Redis 支持五种数据类型。
  • 使用底层模型不同: 它们之间底层实现方式以及与客户端之间通信的应用协议不一样。Redis 直接自己构建了 VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
  • Value 的大小: Redis 可以达到 1GB,而 Memcache 只有 1MB。

淘汰策略

面试官: 那你说说你知道的 Redis 的淘汰策略有哪些?
我: Redis 有六种淘汰策略,如下图:

补充一下: Redis 4.0 加入了 LFU(least frequency use)淘汰策略,包括 volatile-lfu 和 allkeys-lfu,通过统计访问频率,将访问频率最少,即最不经常使用的 KV 淘汰。
最后
欢迎大家一起交流,喜欢文章记得关注我点赞,感谢支持!

如果需要这份面试资料的,私信回复【面试】 即可获取整理的这份2022年最新Java面试资料!

希望能帮助到你面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

发布于 2022-08-22 09:46

秋招跳槽求职P8架构大咖整理“Java后端技术面试笔记”,目标是成为Java架构师,这条件不过分吧相关推荐

  1. 阿里P8架构大咖顷情力荐,“Java全线成长宝典”,从p5到p8一应俱全,跳槽大厂,弯道超车

    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情.作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术 ...

  2. 【大数据分析】2021“秋招”毕业生求职的网络舆论关注度分析

    又是一年秋招来临,数百万毕业生踏上了找工作的奔波旅程. 据教育部数据,2021年高校 应届毕业生人数首次突破900万人,2022年毕业生将超过1000万人. 图片来源于网络 想要在"秋招&q ...

  3. 2023秋招大厂经典面试题及答案整理归纳(161-180)校招必看

    目录 161. MySQL 中 myisam 与 innodb 的区别. 162. 画出OSI和TCP/IP协议栈的对应关系. 163. 简述停止-等待协议(ARQ)的工作原理? 164. redis ...

  4. 计算机秋招必备!北京互联网大厂企业整理清单!

    欢迎持续关注我的博客,后续会帮助大家将全国各地大厂公司整理齐全 全国大城市著名IT公司一览 计算机秋招必备!北京互联网大厂企业整理清单! 计算机秋招必备!上海互联网大厂企业整理清单! 计算机秋招必备! ...

  5. 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看

    目录 201.数组al[O,mid-l]和al[mid,num-l],都分别有序.将其 merge成有序数组al[O,num-1],要求空间复杂度0(1). 202. 一个url指向的页面里面有另一个 ...

  6. 2023秋招大厂经典面试题及答案整理归纳(141-160)校招必看

    目录 141. 动态连接库的两种方式? 142. IP组播有那些好处? 143. 列举几种进程的同步机制及优缺点 144. 什么是预编译,何时需要预编译? 145. int(*s[10])(int)表 ...

  7. 计算机秋招必备!杭州互联网大厂企业整理清单!

    欢迎持续关注我的博客,后续会帮助大家将全国各地大厂公司整理齐全 全国大城市著名IT公司一览 计算机秋招必备!北京互联网大厂企业整理清单! 计算机秋招必备!上海互联网大厂企业整理清单! 计算机秋招必备! ...

  8. 计算机秋招必备!广州互联网大厂企业整理清单!

    欢迎持续关注我的博客,后续会帮助大家将全国各地大厂公司整理齐全 全国大城市著名IT公司一览 计算机秋招必备!北京互联网大厂企业整理清单! 计算机秋招必备!上海互联网大厂企业整理清单! 计算机秋招必备! ...

  9. 计算机秋招必备!上海互联网大厂企业整理清单!

    欢迎持续关注我的博客,后续会帮助大家将全国各地大厂公司整理齐全 全国大城市著名IT公司一览 计算机秋招必备!北京互联网大厂企业整理清单! 计算机秋招必备!上海互联网大厂企业整理清单! 计算机秋招必备! ...

  10. 架构大咖说丨顶级架构师 = 技术大牛?

    -     前言    - 通过自身不断地努力,逐渐成长成为一个顶级的架构师,是许多技术人的梦想.然而,如何成为一个顶级架构师呢?很多人认为只要技术很牛,就能成为顶级架构师,这是一种错误的观点,因为技 ...

最新文章

  1. DCMTK:压缩DICOM文件
  2. 5G专网为“江南皮革厂”带来了什么?
  3. 调焦后焦实现不同距离成像_如何用手机拍出单反的效果,系列学习(一)AF参数“自动调焦”...
  4. 文档词频矩阵_论文理解:从词嵌入到文档距离
  5. python 多线程处理_Python中的多处理与多线程:您需要了解的内容。
  6. eclipse中无法新建Android工程 出现问题:Plug-in org.eclipse.ajdt.ui was unable to load
  7. c++ 中类重复定义的分析与解决办法
  8. 360手机:360手机刷机 救砖 Twrp、Root、Magisk、360N4S骁龙版、360N5、N5S、N6、N6Lite、N6PRO、N7、N7Lite、N7PRO、Q5、Q5Plus
  9. 高中计算机会考vb教程,高中会考计算机vb知识点
  10. 模电、数电、电力电子、开关电源基础知识总结
  11. java计算机毕业设计房产中介管理系统源码+系统+lw+数据库+调试运行
  12. 如何更改Windows系统登陆界面
  13. SAP ABAP ALV 的一些总结:Custom container 和 Splitter container
  14. 线条的样式solid dotted dashed
  15. 百度编辑器(UEditor)自定义内容样式
  16. c语言实验报告中致谢词,实验报告致谢词范文
  17. HTTP协议格式(请求格式、响应格式)
  18. cursor 鼠标样式的几种样式
  19. 基于Flex的在线协作平台
  20. android适配手机与平板,关于平板适配问题

热门文章

  1. 别和我谈理想,我要的是钱
  2. 请没有买房和买车的朋友一定认真的看一下,看后再做决定吧..
  3. SaleSmartly注册登录教程
  4. Python爬虫项目分享一:《爬取周杰伦的歌曲清单》
  5. 判断输入的邮箱格式是否正确
  6. Java方法中参数String...你需要知道的事
  7. iOS判断第三方SDK是否含有广告位
  8. that being said
  9. 外贸常用术语_13个常用的国际贸易术语详解
  10. Java模拟新浪微博登陆抓取数据