
java面试
文章平均质量分 66
专门针对java面试题做的一个专栏
风水道人
另外本人100多年的开发经验,不要质疑大师,质疑那就是你的错。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
final修饰的变量有三种
final修饰的变量有三种原创 2023-05-11 13:05:47 · 796 阅读 · 0 评论 -
Java并发编程详解-知识点梳理
知识体系系统性梳理Java 并发之基础A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解并发理论基础和线程基础,并发关键字等,这些是你理解Java并发框架的基础。@pdai Java 并发 - 知识体系 Java 并发 - 理论基础 多线程的出现是要解决什么问题的? 线程不安全是指什么?举例说明 并发出现线程不安全的本质什么?可见性,原子性和有序性。 Java是怎么解决并发问题的?3个原创 2021-03-11 13:56:20 · 284 阅读 · 0 评论 -
Spring Boot面试讲解
说明:前面有 4 个小节关于Spring的基础知识分别是:IoC 容器、JavaConfig、事件监听、SpringFactoriesLoader 详解它们占据了本文的大部分内容:虽然它们之间可能没有太多的联系,但这些知识对于理解 Spring Boot 的核心原理至关重要,如果你对 Spring 框架烂熟于心,完全可以跳过这 4 个小节。正是因为这个系列的文章是由这些看似不相关的知识点组成,因此取名知识清单。在过去两三年的 Spring 生态圈,最让人兴奋的莫过于 Spring Boot原创 2021-03-02 22:48:33 · 262 阅读 · 0 评论 -
MySQL面试题
前言本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水.前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来.因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要原创 2021-02-25 14:08:13 · 211 阅读 · 0 评论 -
Java高级面试题欢迎补充
Java高级面试题:原创 2021-02-25 13:54:22 · 87 阅读 · 0 评论 -
Java中高级面试题详解
知识体系系统性梳理Java 并发之基础A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解并发理论基础和线程基础,并发关键字等,这些是你理解Java并发框架的基础。@pdai Java 并发 - 知识体系 Java 并发 - 理论基础 多线程的出现是要解决什么问题的? 线程不安全是指什么?举例说明 并发出现线程不安全的本质什么?可见性,原子性和有序性。 Java是怎么解决并发问题的?3个原创 2021-02-21 09:23:54 · 386 阅读 · 0 评论 -
SQL 优化经历:从 30248.271s 到 0.001s
场景 索引优化 单列索引 多列索引 索引覆盖 排序 参考文章 场景我用的数据库是mysql5.6,下面简单的介绍下场景课程表createtableCourse(c_idintPRIMARYKEY,namevarchar(10))数据100条学生表:createtableStudent(idintPRIMARYKEY,nam...原创 2020-09-06 21:31:37 · 123 阅读 · 0 评论 -
SELECT * 效率低
面试官:“小陈,说一下你常用的SQL优化方式吧。”陈小哈:“那很多啊,比如不要用SELECT *,查询效率低。巴拉巴拉...”面试官:“为什么不要用SELECT * ?它在哪些情况下效率低呢?”陈小哈:“SELECT * 它好像比写指定列名多一次全表查询吧,还多查了一些无用的字段。”面试官:“嗯...”陈小哈:“emmm~ 没了”陈小哈:“....??(几个意思)”面试官:“嗯...好,那你还有什么要问我的么?”陈小哈:“我问你个锤子,把老子简...原创 2020-09-06 21:36:29 · 133 阅读 · 0 评论 -
SQL 语句不要过多的 join
回顾 缓冲区 一个大前提 Join算法 送分题 再谈SQL Join 总结 送分题面试官:有操作过Linux吗?我:有的呀面试官:我想查看内存的使用情况该用什么命令我:free 或者 top面试官:那你说一下用free命令都可以看到啥信息我:那,如下图所示 可以看到内存以及缓存的使用情况 total 总内存 used 已用内存 free 空闲内存...原创 2020-09-06 21:38:15 · 439 阅读 · 0 评论 -
几种SQL语句送给大家,让你的SQL高大上
在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑。减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮。1.插入或替换如果我们想插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。情景示例:这张表存的每个客户最近一次交易订单信息,要求保证单个用户数据不重复录入,且执行效率最高,与数据库交互最少,支撑数据库的高可用。此时,可以使用"REPLACE INTO"语句,这样就不必先查...转载 2020-09-06 21:39:44 · 188 阅读 · 0 评论 -
从 MySQL 执行原理告诉你:为什么分页场景下,请求速度非常慢
从一个问题说起五年前在腾讯的时候,发现分页场景下,mysql请求速度非常慢。数据量只有10w的情况下,select xx from 单机大概2,3秒。我就问我师父为什么,他反问“索引场景,mysql中获得第n大的数,时间复杂度是多少?”答案的追寻确认场景假设status上面有索引。select * from table where status = xx limit 10 offset 10000。会非常慢。数据量不大的情况就有几秒延迟。小白作答那...原创 2020-09-16 08:49:57 · 529 阅读 · 0 评论 -
MySQL 百万级数据量分页查询方法及其优化
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出N条输出,其余抛弃. 方法2: 建立主键或唯一索引, 利用索引(假设每页10条) 语句样式: MySQL中...原创 2020-09-21 15:27:56 · 170 阅读 · 0 评论 -
大数据量分页查询怎么优化提速
目录1、准备工作2、一般分页查询3、使用子查询优化4、使用 id 限定优化5、使用临时表优化6、关于数据表的 id 说明当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。准备工作为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history ...原创 2020-09-14 08:59:30 · 312 阅读 · 0 评论 -
SQL 查询总是先执行SELECT语句吗
很多 SQL 查询都是以 SELECT 开始的。不过,最近我跟别人解释什么是窗口函数,我在网上搜索”是否可以对窗口函数返回的结果进行过滤“这个问题,得出的结论是”窗口函数必须在 WHERE 和 GROUP BY 之后,所以不能”。于是我又想到了另一个问题:SQL 查询的执行顺序是怎样的?好像这个问题应该很好回答,毕竟自己已经写了上万个 SQL 查询了,有一些还很复杂。但事实是,我仍然很难确切地说出它的顺序是怎样的。SQL 查询的执行顺序于是我研究了一下,发现顺序大概是这样的。S...原创 2020-09-13 14:30:27 · 286 阅读 · 0 评论 -
MySQL中,当update修改数据与原数据相同时会再次执行吗
一、背景本文主要测试MySQL执行update语句时,针对与原数据(即未修改)相同的update语句会在MySQL内部重新执行吗?二、测试环境MySQL5.7.25Centos 7.4三、binlog_format为ROW1、参数2、测试步骤session1session2session13、总结在binlog_format=row和binlog_r...原创 2020-09-11 09:05:01 · 181 阅读 · 0 评论 -
SQL,Group By 真扎心,原来是这样
GROUP BY 后 SELECT 列的限制标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子:我们有 学生班级表(tbl_student_class) 以及 数据如下 :DROPTABLEIFEXISTStbl_student_class;CREATETABLEtbl_student_class(idint(8)...原创 2020-09-10 09:37:36 · 562 阅读 · 1 评论 -
为什么 GROUP BY 之后不能直接引用原表中的列
GROUP BY 后 SELECT 列的限制标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。我们来看个例子:我们有 学生班级表(tbl_student_class) 以及 数据如下 :DROPTABLEIFEXISTStbl_student_class;CREATETABLEtbl_student_class (idint(8)...原创 2020-09-09 08:39:02 · 613 阅读 · 0 评论 -
为啥MySQL官方不推荐使用uuid或者雪花id作为主键
# 前言在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一,单机递增),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因。本篇博客的目录 mysql程序实例 使用uuid和自增id的索引结构对比 总结 一、mysql和程序实例1.1.要说明...原创 2020-09-07 09:54:58 · 406 阅读 · 0 评论 -
MySQL谈谈InnoDB怎么解决幻读的
1. 结论首先说结论,在RR的隔离级别下,Innodb使用MVCC和next-key locks解决幻读,MVCC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。2. 幻读是什么事务A,先执行:updatetablesetname=“hh”whereid>3;结果为:OK row xx 表名成功影响多少行数据事务B,后执行,并且提交:insertintotable...原创 2020-09-20 15:23:15 · 232 阅读 · 0 评论 -
MySQL又死锁了
打算写一系列死锁分析的例子,将平时遇到的死锁例子记录下来,做好记录,也当做积累。# 死锁输出2017-10-10 17:07:21 7f45a5104700InnoDB: transactions deadlock detected, dumping detailed information.2017-10-10 17:07:21 7f45a5104700*** (1) TRANSACTION:TRANSACTION 47225424098, ACTIVE 0 sec starting..原创 2020-09-21 14:51:04 · 132 阅读 · 0 评论 -
MySQL大表优化方案
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED VAR原创 2020-11-04 08:58:44 · 146 阅读 · 0 评论 -
Redis中删除过期Key的三种策略
说明:项目中有个接口要频繁调用查询数据库中的数据,为了降低数据库的压力,所以把一部分记录先缓存在redis中,对redis中的数据设置了期限。今天无意间发现一个问题,使用dbsize查询出来的数量,比实际缓存量要高一部分。用redis-cli keys '*'|wc -l获取到的数据和实际情况是一样的。如下面两图:对比发现,redis中key的总量为286957,比数据库中的264032高出了20000多个!为什么会这样呢?查找程序原因,并没有发现逻辑问题。查找redis相关资料,发.原创 2020-12-14 18:09:18 · 476 阅读 · 1 评论 -
spring事务传播机制
spring定义了7中事务传播机制: REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) 支持当前事务,如果没有事务会创建一个新的事务 SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) 支持当前事务,如果没有事务的话以非事务方式执行 MANDATORY(TransactionDefinition.PROPAGATION_MAN.原创 2020-12-14 18:05:41 · 231 阅读 · 0 评论 -
分布式锁三种实现方式及对比
分布式锁三种实现方式:1. 基于数据库实现分布式锁;2. 基于缓存(Redis等)实现分布式锁;3. 基于Zookeeper实现分布式锁;一, 基于数据库实现分布式锁1. 悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。2. 乐观锁所谓乐观锁与前边最大原创 2020-12-14 18:03:46 · 1021 阅读 · 0 评论 -
面试-MySQL的四种事务隔离级别
MySQL的四种事务隔离级别本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB一、事务的基本要素(ACID) 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏.原创 2020-12-14 18:00:30 · 337 阅读 · 0 评论 -
java线程面试题及答案线程安全线程锁线程
1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成该任务只需10毫秒。2) 线程和进程有什么区别?一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不原创 2020-10-25 10:57:53 · 880 阅读 · 0 评论 -
java中线程经常被问到ThreadLocal你懂吗?
什么是ThreadLocal变量?ThreadLocal是Java里一种特殊的变量。每个线程都有一个ThreadLocal就是每个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。如果为每个线程提供一个自己独有的变量拷贝,将大大提高效率。首先,通过复用减少了代价高昂的对象的创建个数。其次,你在没有使用高代价的同步或者不变性的情况下获得了线程安全。ThreadLocal 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变原创 2020-10-25 10:41:48 · 445 阅读 · 2 评论 -
java高级程序员线程池剖析面试题及答案
1、什么是线程池java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成原创 2020-10-24 08:59:21 · 402 阅读 · 0 评论