- 博客(46)
- 收藏
- 关注
原创 26 网络与Web
网络与Web一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读一、知识结构及面试题目分析 网络与 web 是 Java 工程师特别是 Java 服务端工程师的重要横向能力之一,也是开发人员与用户之间的桥梁。线上故障有时候并不是出现在服务端业务逻辑层,而是网络或者环境引起的。所以接下来的两个章节将从两个部分介绍相关内容:一部分是网络与 web,重点是客户端链路以及客户端与服务端的交互;另一部分是 Linux 与运维,重点是服务端的部署与环境。二、典型面试例题及思路分析问题 1
2021-02-21 23:50:03 158
原创 25 数据结构与算法
数据结构与算法一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结程序 = 算法 + 数据结构,这是程序的经典解释。所谓数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作;所谓算法,是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。一、知识结构及面试题目分析 在专栏开始之前,笔者也曾与课程顾问进行了深度讨论,要不要保留这一章。倒不是说算法与数据结构不重要,主要是基于以下两方面的考虑: 一是契合性。数据结构与算法对于计算机人才来说很重要,不过它内容
2021-02-21 23:30:50 212
原创 其他缓存
其他缓存一、典型面试例题及思路分析二、总结三、扩展阅读及思考题一、典型面试例题及思路分析问题 1:什么是缓存雪崩?一般怎么解决? 缓存雪崩,即缓存同一时间大面积的失效(比如说大量的 key 设置了相同的过期时间,导致在缓存在同一时刻全部失效),造成瞬时 DB 请求量过大、压力骤增。通常的解决方案: (1) 将缓存过期时间分散开,比如说设置过期时间时再加上一个较小的随机值时间,使得每个 key 的过期时间,不会集中在同一时刻失效; (2)采用限流算法,限制请求流量,业务有损; (3)
2021-02-21 23:25:40 240
原创 Redis
Redis一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读一、知识结构及面试题目分析 " Redis 是一个开源(BSD 许可)的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings),散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询,bitmaps, hyperloglogs 和地理空间(geospatial)索引半径查询。 Redis 内置了 复制
2021-02-21 16:45:58 306 1
原创 Memcached
Memcached一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题一、知识结构及面试题目分析缓存技术的大规模使用是互联网架构区别于传统 IT 技术最大的地方,是整体高并发高性能架构设计中是重中之重的关键一笔,也是互联网公司比较偏好的面试题目。按照在软件系统中所处位置的不同,缓存大体可以分为三类:客户端缓存、服务端缓存、网络中的缓存;根据部署方式大体可分为:本地缓存和分布式缓存。专栏将以分布式缓存为重点,挑选其中应用最广的 memcached、redis 分别予以介绍,同时
2021-02-21 16:27:38 3904 1
原创 Mysql进阶
Mysql进阶一、典型面试例题及思路分析二、总结三、扩展阅读及思考题一、典型面试例题及思路分析问题 1:分析一下 select * from t_employee t where t.age=27 and t.name = ‘李四’ 这条语句在 mysql 中如何执行的?在连接器上进行权限检查。首先在连接器如果没有权限,直接返回错误信息;如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步;
2021-02-21 16:05:19 465 2
原创 Mysql锁
Mysql锁一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题一、知识结构及面试题目分析MySQL 锁比较抽象,日常开发中你甚至感觉不到它的存在,隐藏得比较深,但它却是 MySQL 的一个核心知识点,基于它的面试题可以很基础,也可能很灵活。通常来讲,MySQL 锁有三类面试题:一是基本知识点的考察,各种锁的类型及应用;二是和锁相关的概念及应用;三是锁和实际用例结合起来的面试题;二、典型面试例题及思路分析问题 1:什么是乐观锁和悲观锁?悲观锁:对于同一个数据的
2021-02-21 15:41:23 103
原创 Mysql索引
Mysql索引前言一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题前言专栏中的 Java 基础技术部分就已经结束了。接下来的课程将围绕着 Java 横向技术展开。 作为 T 字型工程师,前者代表 Java 技术的深度,后者则代表了 Java 技术的广度。Java 横向技术分为数据库、缓存、数据结构与算法、Linux 系统与运维、设计模式、框架、综述七个专题展开,打造 Java 工程师的综合素质,这也是技术人员在职业生涯中向前一步发展成为架构师、技术经理、技术总监所必须掌握
2021-02-21 15:22:06 209
原创 队列
队列一、队列知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题一、队列知识结构及面试题目分析JAVA 中的队列也是比较常见的面试题,一般队列的面试题可以分为三类:队列及类似结构的基础类题目,通常围绕着队列的数据结构特性展开,有时候会以编程题的形式考察;队列的细分题目,考察阻塞队列、非阻塞队列、延迟队列、同步队列等不同队列的特性及应用场景;队列和线程池、消息总线等结合着考察。总体来讲,队列属于基础知识中的高阶部分,如果不是候选人简历中特意提及,通常不会考得太深入。但正
2021-02-21 14:34:26 197
原创 IO
IO一、IO 知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题Java 的四大基础部分:java 基础技术、 java 集合、 JVM、 多线程和并发至此已经讲解结束。此外,Java 还有一些其他稍散的面试主题,剩下的两个章节会分别围绕着 IO 和 队列进行展开说明。一、IO 知识结构及面试题目分析IO 即 Input/Output(输入 / 输出),一般的读写过程为:从磁盘读取数据:磁盘–> 内核空间 --> 用户空间从磁盘写入数据:用户空间–>
2021-02-20 22:49:28 256
原创 Java并发进阶
Java并发进阶一、典型面试例题及思路分析二、总结三、扩展阅读及思考题一、典型面试例题及思路分析问题 1:了解 AQS 吗?说一说 AQS 的原理?有哪些应用?AQS 的原理 AQS(AbstractQueuedSynchronizer)核心思想是,如果被请求的资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态;如果被请求的资源被占用,则需要一套线程阻塞等待以及唤醒分配的机制,该机制基于一个 FIFO(先进先出)的等待队列实现。AQS 的应用 作为一个用来
2021-02-20 22:30:53 188
原创 线程和线程池
线程和线程池一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题一、知识结构及面试题目分析多线程几乎也是 Java 高阶必考内容,内容比较发散,涉及到多线程、线程池、ThreadLocal、线程等等内容,这里选择若干高频问题进行讲解,更多的内容还可以参见扩展阅读部分内容。二、典型面试例题及思路分析问题 1:java 中线程有哪些状态?共 6 种状态:初始状态 (NEW) :尚未启动的线程处于此状态。通常是新创建了线程,但还没有调用 start () 方法;运行
2021-02-20 22:16:02 181
原创 锁与并发
锁与并发一、知识结构及面试题目分析二、典型面试例题及思路分析三、总结四、扩展阅读及思考题与 JVM 一样,并发与多线程也是 Java 程序员进阶必备的知识,也几乎是中高级岗位程序员的必考题目,具有相当的深度和区分度。同样不仅用于考察候选人能否回答正确,而且还用于考察候选人对问题的理解深度 — 这类考察深度的面试题通常直接关系着候选人的定级,而定级又通常和薪资挂钩。并发也是一个很庞大的主题,专栏将多线程与并发的面试高频题精简为三方面的内容: 1. 锁与并发; 2. 线程与线程池; 3. Java
2021-02-20 21:54:52 479
原创 JVM进阶
一、知识结构及面试题目分析JVM 进阶面试主要包括两类:一是和工程实践结合的面试题,考察面试者是临时抱佛脚背了一些知识点还是真的有将 JVM 知识应用到平常的项目中:解释线上的配置(如 gc 配置、gc 日志等等)线上问题排查示例,涉及工具、经验、实例等;和某些知识点结合的面试题。二是 JVM 相关领域的新知识点。二、典型面试例题及思路分析问题 1:你们生产环境线上服务器的 JVM 启动参数配置是什么样的?-Xms4096m -Xmx4096m -Xmn2048m -Xss512k
2021-02-20 21:30:12 244
原创 JVM垃圾加载回收机制
一、知识结构及面试题目分析JVM 是 Java 平台最重要的组成部分之一,其核心在于垃圾回收机制,JVM 也几乎是面试的必考题目。垃圾回收机制的内容又主要以 GC 算法和垃圾回收器为知识骨干,辅以 GC 分析和命令调优。值得注意的是,相较于 Java 的其他知识,JVM 和多线程可以称得上是 Java 区分度最高的考点。这两类面试题不仅考察候选人能否回答正确,而且还用于考察候选人可以在多深的程度上回答正确(经常以追问的形式)— 这类考察深度的面试题通常直接关系着候选人的定级,而定级又通常和薪资挂钩,因此
2021-02-20 21:02:06 227
原创 Java内存结构与类加载机制
Java 虚拟机(Java Virtual Machine,JVM)是 Java 程序员进阶必备的知识,也几乎是中高级岗位程序员的必考题目,具有一定的深度和区分度。但 JVM 是一个很庞大的主题,通常是一本专著的体量,专栏将 JVM 面试高频题精简为三方面的内容:Java 内存结构与类加载机制;JVM 与垃圾加收;JVM 进阶,主要是 JVM 知识与应用结合的问题。这三个章节又可以为两部分内容:基础知识 + 应用结合。基础知识不必多说,而所谓应用结合又有两重境界:一是和工程实践项目结合,重点考察工程
2021-02-20 20:24:31 238
原创 集合类进阶
问题 1:“Java 集合的快速失败(fail-fast)和安全失败(fail-safe)的差别是什么?”快速失败和安全失败都是 java 集合(Collection)的一种错误机制。单线程情况下,遍历集合时去执行增删等改变集合结构的操作;或者多线程情况下,一个线程遍历集合,另一个线程执行增删等改变集合结构的操作。快速失败,是指失败 / 异常时立即报错,通常会抛出 ConcurrentModificationException 异常,像 java.util 包下面的集合类就是使用这种机制;安全失败.
2021-02-20 14:29:37 268
原创 集合(List、Set)
一、典型面试例题及思路分析问题 1:“ArrayList 和 LinkedList 的的相同点和不同点分别是什么?”相同点:ArrayList 和 LinkedList 都是 List 接口的实现类,因此都具有 List 的特点,即存取有序,可重复;而且都不是线程安全的。不同点:ArrayList 基于数组实现,LinkedList 基于双向链表实现。点评:这是一个典型的考察集合异同点的面试题。同类面试题还有很多,比如说数组 (Array) 和列表 (ArrayList) 的差别是什么?
2021-02-18 22:30:58 185
原创 集合(Map)
一、Map 知识结构及面试题目分析一般而言,Map 的面试题可分为四类:HashMap 的数据结构,面试官考察的是对 Map 内部的存储结构了解;HashMap 的增删查改操作,面试官考察的是对 map 内部操作流程的熟悉程度,既要知其然,还要知其所以然;HashMap 的的应用,面试官考察的是灵活运用 HashMap 的能力;其他 Map 类面试题,面试官考察的是系统掌握 Map 类的能力。前两类面试题的考察点在深度,后两类面试题的考察点在广度。我们了解到面试题背后的逻辑后,可以在回答面试题时
2021-02-18 21:52:07 192
原创 反射和代理
问题 1:"Java 反射是指什么?它的使用场景及其优缺点分别什么?"Java 反射是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 java 语言的反射机制。使用场景主要用于根据运行时信息来发现该类 / 对象 / 方法 / 属性的场景,典型的场景比如 Spring 等框架的配置、动态代理等。其原理主要是通过访问装载到 JVM 中的类信息,来获取类 / 对象 / 方法 / 属性等信息。.
2021-02-17 23:55:03 203
原创 面向对象
一、Java面向对象知识结构Java语法和关键字,属于形而下的语言规范,如接口与类、内部类,final/finally/finalize,throw/throws,域访问符权限等;Java 面向对象思想及体系,属于形而上的设计思想。二、典型面试例题及思路分析2.1 "Java 有没有 goto? 如果有,一般用在什么地方?如果没有,如何跳出当前的多重嵌套循环?"goto 是 Java 中的保留字,在目前版本的 Java 中没有使用。Java 中跳出多重循环有三种方式:1、break +
2021-02-17 22:47:45 74
原创 JDK
一、JDK基础知识结构二、JDK基础面试题2.1 你常用的JDK类有哪些?请说出5个。String、StringBuffer、Integer、ArrayList、HashMap、Date、Object(选择熟悉的5个)2.2 "String、StringBuilder、StringBuffer的区别是什么?"1、可变性:String不可变,StringBuilder与StringBuffer是可变的。String类中使用只读字符数组保存字符串,private final char val
2021-02-16 15:23:28 114
原创 多线程(线程池)
多线程(三)线程池1)常见的线程池及使用场景2)线程池的运行机制3)线程池的拒绝策略4)阻塞队列5)怎么理解无界队列和有界队列?6)重要参数线程池1)常见的线程池及使用场景newSingleThreadExecutor创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。public static ExecutorService newSingleThreadExecutor() { return new F
2020-09-14 01:47:07 112
原创 多线程(Volatile)
多线程(二)前序 JMM(JavaMemoryModel)现代计算机的内存模型JMM有以下规定:1)多线程间的可见性的解决方案?(可见性)1.1 为啥加锁可以解决可见性问题呢?1.2 Volatile做了什么?2)当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致,那同步回到主内存时以谁的缓存数据为准呢?(一致性)MESI(缓存⼀致性协议)2.1 至于是怎么发现数据是否失效呢?2.2 嗅探的缺点?前序 JMM(JavaMemoryModel)JMM :Java内存模型,是ja
2020-09-13 15:08:29 371
原创 多线程(synchronized,ReentrantLock,公平锁与非公平锁)
1、synchronizedsynchronized加锁,synchronized 是最常⽤的线程同步⼿段之⼀,CAS是乐观锁的实现,synchronized就是悲观锁了。1)synchronized锁升级过程jdk1.6 中为了减少获得锁和释放锁带来的性能消耗⽽引⼊的偏向锁和轻量级锁。针对 synchronized 获取锁的⽅式,JVM 使⽤了锁升级的优化⽅式,就是先使⽤偏向锁优先同⼀线程然后再次获取锁,如果失败,就升级为 CAS 轻量级锁,如果失败就会短暂⾃旋,防⽌线程被系统挂起。最后如果
2020-09-10 17:15:25 715
原创 集合篇(list、map、set)
集合篇(一)1、ArrayList1)是什么2)有哪些用?3)为什么线程不安全还用它?4)如何初始化的数组大小?5)不断加数据,是如何扩容的?6)1.7和1.8版本初始化的时候的区别?7)ArrayList在增删的时候是怎么做的,为什么慢?8)ArrayList插入删除⼀定慢么?删除怎么实现的呢?9)ArrayList是线程安全的么?10)ArrayList用来做队列合适么?11)数组适合用来做队列么?12)ArrayList的遍历和LinkedList遍历性能比较如何?2、LinkedList是什么?为什
2020-09-10 00:35:08 226
原创 springboot(二)日志
springboot 日志1. 日志框架2. SLF4j使用1、如何在系统中使用SLF4j https://www.slf4j.org2、遗留问题3. SpringBoot日志关系4. 日志使用1、默认2、指定配置5. 切换日志框架1. 日志框架日志门面(日志的抽象层)日志实现JCL(Jakarta Commons Logging)Log4j JUL(java.util.logging)SLF4j(Simple Logging Facade for Java) jboss-l
2020-08-27 12:10:47 320
原创 Springboot与数据访问
Springboot与数据访问1. JDBC2. 整合Druid1、通过配置类整合2、通过start依赖3. 整合Mybatis1、注解版(简单的sql语句更适合)2、配置文件版4. 整合SpringData JPA1. JDBC依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-start
2020-08-11 15:10:15 243
原创 Docker入门
Docker1、简介2、核心概念3、安装docker1)、安装虚拟机2)、在linux上安装docker4、docker常用命令&操作安装Mysql示例1、简介Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为容器,容器启动是非常快速的。2、核心概念docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之
2020-08-08 17:24:31 77
原创 SpringMVC(二)响应数据和结果视图,文件上传,异常处理和拦截器
Spring响应数据和结果视图,文件上传,异常处理和拦截器1. 响应数据和结果视图1.1 返回值分类1.1.1 字符串1.1.2 void1.1.3 ModelAndView1.2 转发和重定向1.2.1 forward 转发(第二种方式)1.2.2 Redirect 重定向(第二种方式)1.3 @ResponseBody响应json数据1. 文件上传1. 响应数据和结果视图1.1 返回值分类1.1.1 字符串使用@ResponseBody 注解实现将 controller 方法返回对象转换为 js
2020-08-08 15:50:17 138
原创 SpringBoot(二)web开发部分
SpringBoot web开发1. SpringBoot静态资源的映射规则2. 模板引擎2.1 引入thymeleaf2.2 Thymeleaf使用&语法3. SpringMVC自动配置1. SpringBoot静态资源的映射规则可以设置和静态资源有关的参数,缓存时间等@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)public class ResourcePropertie
2020-08-08 15:49:59 136
原创 SpringBoot 配置嵌入式Servlet容器&使用外置的Servlet容器
配置嵌入式Servlet容器&使用外置的Servlet容器配置嵌入式Servlet容器1. 如何定制和修改Servlet容器的相关配置配置嵌入式Servlet容器1. 如何定制和修改Servlet容器的相关配置1)、修改和server有关的配置(ServerProperties【也是WebServerFactoryCustomizer】); server.port=8081 server.context‐path=/crud server.tomcat.uri‐encoding=UTF‐
2020-08-03 22:27:52 188
原创 SpringBoot 错误处理原则&定制错误页面
错误处理原则&定制错误页面1. 错误处理机制1)如何定制错误响应1. 错误处理机制默认效果:1.PC端浏览器返回一个默认错误页面浏览器发送请求的请求头:2.客户端访问,默认响应json数据原理:可以参照ErroorMvcAutoConfiguration;错误处理的自动配置给容器中添加了以下组件1、ErrorPageCustomizer @Value("${error.path:/error}") private String path = "/er
2020-08-01 17:30:08 295
原创 SpringMVC(一)环境搭建,请求参数绑定和常用注解
SpringMVC环境搭建,和常用注解1. 环境简单搭建2. 常用注解2.1 @RequestMapping2.2 @RequestParam2.3 @RequestBody2.4 @PathVariable2.5 @RequestHeader1. 环境简单搭建创建项目导入坐标```javascript <dependencies> <dependency> <groupId>org.springframework<
2020-07-12 22:27:19 345
原创 Spring(七)声明式事务
声明式事务1. 基于XML的声明式事务2. 基于注解的声明式事务3. 纯注解的声明式事务1. 基于XML的声明式事务maven导包<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> &
2020-07-07 14:03:10 119
原创 spring(六)JdbcTemplate,AOP事务控制(简单实现)
JdbcTemplate,AOP事务控制(简单实现)1. JdbcTemplate的使用及Dao的两种编写方式1.1 注解式1.2 继承JdbcDaoSupport2. AOP事务控制2.1 基于XML的AOP实现事务控制2.2 基于注解的AOP实现事务控制1. JdbcTemplate的使用及Dao的两种编写方式1.1 注解式 <context:component-scan base-package="com.java"></context:component-scan>
2020-07-06 18:03:23 354
原创 Spring(五)AOP的两种简单实现
Spring-AOP1. AOP相关术语2. 基于XML配置的AOP2.1 接口和实现类:2.2 日志类2.3 bean.xml配置2.4 测试类1. AOP相关术语连接点(Joinpoint): 业务层接口里的方法全是连接点。切入点(Pointcut): 被AOP增强的方法。(所有切入点都是连接点)通知/增强(Advice): 指拦截到Joinpoint之后所要做的事情(五种通知)目标对象(Target): 被代理对象(accountService)织入(Weaving): 指把增强应用到目标
2020-07-02 20:22:50 283
原创 Spring(四)AOP之动态代理讲解
AOP---动态代理1.基于接口的动态代理2.基于子类的动态代理3.动态代理实现事务控制3.1 工具类3.2 持久层3.3 业务层3.4 动态代理工厂3.5 bean.xml配置1.基于接口的动态代理/** * 代理对生产厂家要求的接口 */public interface IProducer { /** * 销售 * @param money */ public void saleProduct(float money); /**
2020-06-29 16:14:00 109
原创 Spring(二)bean,DI
Spring 依赖注入bean标签1 bean的三种创建方式2 bean的作用范围3 bean对象的生命周期依赖注入1. 三种注入方式1.1 第一种使用构造函数(一般不采用)1.2 第二种使用set注入(更常用)1.3 第三种注解注入2. 复杂类型的注入/集合类型的注入按作用分类常用IOC注解1. 用于创建对象的注解2. 用于注入数据的注解3. 用于改变作用范围的4. 和生命周期相关(了解)bean标签1 bean的三种创建方式1.构造器实例化: 用默认构造函数创建。在spring的配置文件中使用b
2020-06-18 23:55:26 185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人