![](https://img-blog.csdnimg.cn/20201216114447323.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试题
文章平均质量分 87
主要分享Java面试题
杨林伟
像火箭科学家一样思考!
展开
-
Java面试题 -为什么delete表数据磁盘空间还被占用?
文章目录1. 前言2. 分析问题3. 如何解决?3.1 optimize3.1 optimize 与alter的区别 4. Online DDL1. 前言声明:本文总结笔记参考 https://www.toutiao.com/i6935264754059477542?wid=1627461136093最近有个全量同步的功能开发,操作过程是先删除在插入,并通过delete删除表记录。这样会有一个问题,如下: 已经执行了delete,表文件的大小为何没减小?2. 分析问题delete后发生了什么原创 2021-07-28 17:02:12 · 535 阅读 · 0 评论 -
Java面试题 -其它整理
Java 最常见 200+ 面试题全解析:面试必备(转载)https://blog.csdn.net/qq_39268193/article/details/94741536转载 2020-06-01 16:30:41 · 401 阅读 · 0 评论 -
Java面试题 -系统解决方案
1. 利⽤消息中间件和缓存实现简单的秒杀系统a. Redis是⼀个分布式缓存系统,⽀持多种数据结构,我们可以利⽤Redis轻松实现⼀个强⼤的秒杀系统。b. 我们可以采⽤Redis 最简单的key-value数据结构,⽤⼀个原⼦类型的变量值(AtomicInteger)作为key,把⽤户id作 为value,库存数量便是原⼦变量的最⼤值。对于每个⽤户的秒杀,我们使⽤ RPUSH key value插⼊秒杀请求, 当插⼊的秒杀请求数达到上限时,停⽌所有后续插⼊。c. 然后我们可以在台启动多个⼯作线程,使⽤原创 2020-06-01 15:55:12 · 775 阅读 · 0 评论 -
Java面试题 -大数据
1. apm系统:a. druid.io:时序数据库;b. hbase(phoenix查询):⾮关系型分布式数据库;2. ⽤户⾏为分析系统:a. hive:基于hadoop的数据仓库⼯具;b. impala:基于hive的⼤数据实时分析引擎。3. HBase如何实现模糊查询?HTable table = new HTable(conf, tablename);Scan s = new Scan(); //查询rowkey包括xx的⾏Filter filter = new RowFilte原创 2020-06-01 15:39:02 · 535 阅读 · 0 评论 -
Java面试题 -源码解读
1. spring 启动refresh():public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prepareRefresh(); // Tell the subclass to refresh原创 2020-06-01 15:34:23 · 522 阅读 · 0 评论 -
Java面试题 -高并发、高可用、分布式
1. ⾼并发原则⽆状态:⽆状态应⽤,便于⽔平扩展有状态配置可通过配置中⼼实现⽆状态实践: Disconf、Yaconf、Zookpeer、Consul、Confd、Diamond、Xdiamond等拆分:系统维度:按照系统功能、业务拆分,如购物⻋,结算,订单等功能维度:对系统功能在做细粒度拆分读写维度:根据读写⽐例特征拆分;读多,可考虑多级缓存;写多,可考虑分库分表AOP维度: 根据访问特征,按照AOP进⾏拆分,⽐如商品⻚可分为CDN、⻚⾯渲染系统,CDN就是⼀个AOP系统模块维度原创 2020-06-01 15:25:57 · 3590 阅读 · 2 评论 -
Java面试题 -网络
1. TCP建⽴连接的过程三次握⼿:第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认;第⼆次握⼿(服务器返回syn+ack包给客户端):服务器端收到客户端的syn包,发送syn+ack包给客户端,进⼊syn_recv状态;第三次握⼿(客服端返回ack包给服务端):客户端收到服务器端的syn+ack包,发送个ack包到服务器端,⾄此,客户端与服务器端进⼊established状态;握⼿过程中传送的包不包含任何数据,连接建⽴后才会原创 2020-06-01 15:06:06 · 1817 阅读 · 0 评论 -
Java面试题 -Linux命令
1. 使⽤两种命令创建⼀个⽂件? touch a.txt vi a.txt mkdir abc cat > a.txt 建⽴⼀⽂件,然后把接下来的键盘输⼊写⼊⽂件,直到按Ctrl+D为⽌.2. 硬链接和软连接的区别?硬链接:1、⽂件有相同的 inode 及 data block;2、只能对已存在的⽂件进⾏创建;3、不能交叉⽂件系统进⾏硬链接的创建;4、不能对⽬录进⾏创建,只可对⽂件创建;5、删除⼀个硬链接⽂件并不影响其他有相同 inode 号的⽂件。软链接:1、软链接原创 2020-06-01 14:38:00 · 1070 阅读 · 0 评论 -
Java面试题 -缓存
1. 列举⼀个常⽤的Redis客户端的并发模型2. 如何实现⼀个Hashtable?你的设计如何考虑Hash冲突?如何优化?3. 分布式缓存,⼀致性hash⼀致性hash算法:我们的memcached客户端(这⾥我看的spymemcache的源码),使⽤了⼀致性hash算法ketama进⾏数据存储节点的选择。与常规的hash算法思路不同,只是对我们要存储数据的key进⾏hash计算,分配到不同节点存储。⼀致性hash算法是对我们要存储数据的服务器进⾏hash计算,进⽽确认每个key的存储位置。这⾥提原创 2020-06-01 14:24:41 · 1436 阅读 · 1 评论 -
Java面试题 -RocketMQ
http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/中⼩型公司⾸选RabbitMQ:管理界⾯简单,⾼并发。⼤型公司可以选择RocketMQ:更⾼并发,可对rocketmq进⾏定制化开发。⽇志采集功能,⾸选kafka,专为⼤数据准备。1. 消息可靠性:影响消息可靠性的情况:i. Broker正常关闭ii. Broker异常Crashiii. OS Crashiv. 机器掉电,但是能⽴即恢复供电情况。v.原创 2020-06-01 14:12:06 · 931 阅读 · 0 评论 -
Java面试题 -Kafka
1. 说说kafka:1.消息分类按不同类别,分成不同的Topic,Topic⼜拆分成多个partition,每个partition均衡分散到不同的服务器(提⾼并发访问的能⼒)。2.消费者按顺序从partition中读取,不⽀持随机读取数据,但可通过改变保存到zookeeper中的offset位置实现从任意位置开始读取。3.服务器消息定时清除(不管有没有消费)4.每个partition还可以设置备份到其他服务器上的个数以保证数据的可⽤性。通过Leader,Follower⽅式。5.zookeepe原创 2020-06-01 13:51:45 · 690 阅读 · 0 评论 -
Java面试题 -RabbitMQ
1.上千万条消息在mq中积压了⼏个⼩时还没解决?先修复consumer的问题,确保其恢复消费速度,然后将现有consumer都停掉;新建⼀个topic,partition是原来的10倍,临时建⽴好原先10倍或者20倍的queue数量;然后写⼀个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据;消费之后不做耗时的处理,直接均匀轮询写⼊临时建⽴好的10倍数量的queue;接着临时征⽤10倍的机器来部署consumer,每⼀批consumer消费⼀个临时queue的数据;这种做法相原创 2020-06-01 11:40:48 · 730 阅读 · 0 评论 -
Java面试题 -数据库
1. MySQL InnoDB、MyISAM的特点?InnoDB:⽀持事务处理⽀持外键⽀持⾏锁不⽀持FULLTEXT类型的索引(在Mysql5.6已引⼊)不保存表的具体⾏数,扫描表来计算有多少⾏对于AUTO_INCREMENT类型的字段,必须包含只有该字段的索引DELETE 表时,是⼀⾏⼀⾏的删除InnoDB 把数据和索引存放在表空间⾥⾯跨平台可直接拷⻉使⽤表格很难被压缩MyISAM:不⽀持事务,回滚将造成不完全回滚,不具有原⼦性不⽀持外键⽀持全⽂搜索保存表的具体⾏数,原创 2020-06-01 11:06:50 · 1114 阅读 · 0 评论 -
Java面试题 -其他框架
1. 描述⼀下Hibernate的三个状态?a. transient(瞬时状态):new出来⼀个对象,还没被保存到数据库中b. persistent(持久化状态):对象已经保存到数据库中并且在hibernate session也存在该对象c. detached(离线状态):对象在数据库中存在,hibernate session不存在2. struts⼯作流程1、客户端浏览器发出HTTP请求。2、根据web.xml配置,该请求被FilterDispatcher接收。3、根据struts.xml原创 2020-06-01 10:44:33 · 1007 阅读 · 0 评论 -
Java面试题 - Spring
1. Spring中的Bean的生命周期Instance实例化-> 设置属性值-> 调⽤BeanNameAware的setBeanName⽅法->调⽤BeanPostProsessor的预初始化⽅法->调⽤InitializationBean的afterPropertiesSet()的⽅法->调⽤定制的初始化⽅法callCustom的init-method->调⽤BeanPostProsessor的后初始化⽅法->Bean可以使⽤了 -> 容器关闭-&g原创 2020-06-01 10:04:40 · 855 阅读 · 0 评论 -
Java面试题 - 数据结构与算法
1. 说⼀下⼏种常⻅的排序算法和分别的复杂度【快速排序】原理:快速排序采⽤的是⼀种分治的思想,它先找⼀个基准数(⼀般选择第⼀个值),然后将⽐这个基准数⼩的数字都放到它的左边,然后再递归调⽤,分别对左右两边快速排序,直到每⼀边只有⼀个数字.整个排序就完成了.选定⼀个合适的值(理想情况中值最好,但实现中⼀般使⽤数组第⼀个值),称为“枢轴”(pivot)。基于这个值,将数组分为两部分,较⼩的分在左边,较⼤的分在右边。可以肯定,如此⼀轮下来,这个枢轴的位置⼀定在最终位置上。对两个⼦数组分别重复上述过程原创 2020-05-28 17:42:38 · 4250 阅读 · 2 评论 -
Java面试题 - SpringCloud
1. 什么是微服务a. 微服务是⼀种架构⻛格,也是⼀种服务;b. 微服务的颗粒⽐较⼩,⼀个⼤型复杂软件应⽤由多个微服务组成,⽐如Netflix⽬前由500多个的微服务组成;c. 它采⽤UNIX设计的哲学,每种服务只做⼀件事,是⼀种松耦合的能够被独⽴开发和部署的⽆状态化服务(独⽴扩展、升级和可替换)。 2. 微服务之间是如何独⽴通讯的a. Dubbo 使⽤的是 RPC 通信,⼆进制传输,占⽤带宽⼩;b. Spring Cloud 使⽤的是 HTTP RESTFul ⽅式。3. springc.原创 2020-05-28 17:01:53 · 3222 阅读 · 0 评论 -
Java面试题 - Dubbo
1、Dubbo是什么?Dubbo是阿⾥巴巴开源的基于 Java 的⾼性能 RPC 分布式服务框架,现已成为 Apache 基⾦会孵化项⽬。官⽹:http://dubbo.apache.org2、为什么要⽤Dubbo?因为是阿⾥开源项⽬,国内很多互联⽹公司都在⽤,已经经过很多线上考验。内部使⽤了 Netty、Zookeeper,保证了⾼性能⾼可⽤性。使⽤ Dubbo 可以将核⼼业务抽取出来,作为独⽴的服务,逐渐形成稳定的服务中⼼,可⽤于提⾼业务复⽤灵活扩展,使前端应⽤能更快速的响应多变的市场需求。下原创 2020-05-28 16:21:36 · 1267 阅读 · 0 评论 -
Java面试题 - 多线程
01 什么是线程?线程是操作系统能够进⾏运算调度的最⼩单位,它被包含在进程之中,是进程中的实际运作单位,可以使⽤多线程对进⾏运算提速。⽐如,如果⼀个线程完成⼀个任务要100毫秒,那么⽤⼗个线程完成改任务只需10毫秒02 什么是线程安全和线程不安全?线程安全:就是多线程访问时,采⽤了加锁机制,当⼀个线程访问该类的某个数据时,进⾏保护,其他线程不能进⾏访问,直到该线程读取完,其他线程才可使⽤。不会出现数据不⼀致或者数据污染。Vector 是⽤同步⽅法来实现线程安全的, ⽽和它相似的ArrayL原创 2020-05-28 15:59:49 · 15352 阅读 · 0 评论 -
Java面试题 - 设计模式
01 工厂方法模式(利用创建同一接口的不同实例)普通⼯⼚模式:建⽴⼀个⼯⼚类,对实现了同⼀接⼝的⼀些类进⾏实例的创建;多个⼯⼚⽅法模式:提供多个⼯⼚⽅法,分别创建对象; 静态⼯⼚⽅法模式:将上⾯的多个⼯⼚⽅法置为静态的,不需要创建⼯⼚实例,直接调⽤即可;适⽤场景:凡是出现了⼤量不同种类的产品需要创建,并且具有共同的接⼝时,可以通过⼯⼚⽅法模式进⾏创建。在以上的三种模式中,第⼀种如果传⼊的字符串有误,不能正确创建对象,第三种相对于第⼆种,不需要实例化⼯⼚类,所以,⼤多数情况下,我们会选⽤第三种——原创 2020-05-28 14:18:15 · 1034 阅读 · 0 评论 -
Java面试题 - JVM相关
01 JVM结构PC寄存器:每个线程拥有⼀个pc寄存器;指向下⼀条指令的地址。⽅法区:保存装载的类的元信息:类型的常量池,字段、⽅法信息,⽅法字节码;jdk6时,String等常量信息置于⽅法区,jdk7移到了堆中;通常和永久区(Perm)关联在⼀起;堆:应⽤系统对象都保存在java堆中;所有线程共享java堆;对分代GC来说,堆也是分代的;栈:线程私有;栈由⼀系列帧组成(因此java栈也叫做帧栈);帧保存⼀个⽅法的局部变量(局部变量表)、操作数栈、常量池指针;原创 2020-05-28 11:33:41 · 1165 阅读 · 0 评论 -
Java面试题 - 基础题
01 接口和抽象类的区别⼀个类声明可否既是abstract的,⼜是final的? 不能,这两个修式符⽭盾(abstract就是要被继承)抽象类不⼀定包含抽象⽅法有抽象⽅法,则⼀定是抽象类抽象类不能被实例化,⼀般⽤作基类使⽤;类可以实现多个接⼝但只能继承⼀个抽象类接⼝⾥⾯所有的⽅法都是Public的,抽象类允许private、protected⽅法JDK8前接⼝⾥⾯所有的⽅法都是抽象的且不允许有静态⽅法,抽象类可以有普通、静态⽅法,JDK8 接⼝可以实现默认⽅法和静态⽅法,前⾯加default原创 2020-05-28 10:42:25 · 4073 阅读 · 1 评论 -
Java面试题 - 高频题
01 深入了解的知识点java集合数据结构jvm: gc、内存模型、堆分代多线程:volatile、java.util.concurrent包spring:启动、时间redis:分布式锁、lua保证原子性、集群消息队列:kafkaSpringCloudMySql搜索引擎,索引B+tree02 Java基础NIO模型java反射java8特性java中有哪些集合?各自的数据结构?说说你用过的设计模式jdk以及spring中看过哪些设计模式03 JVMjvm结构,以及原创 2020-05-28 09:18:45 · 1062 阅读 · 0 评论