
Java面试
文章平均质量分 92
各种Java面试技巧
hanxiaozhang2018
当你的才华还撑不起你的野心时,那你就应该静下心来学习!
展开
-
MySQL面试重点-2
乐观锁并不是数据库自带的,需要自己去实现,一般情况下,我们会在表中新增一个version字段,每次更新数据version+1,在进行提交之前会判断version是否一致。模拟MySQL优化器运行SQL语句,了解MySQL如何处理你的SQL语句。两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。show engines命令查看数据库支持的存储引擎。一主一从、主主复制、一主多从、多主一从、联级复制。MySQL加锁情况分析:***《见MySQL加锁》原创 2024-06-24 07:15:00 · 2558 阅读 · 0 评论 -
MySQL面试重点-1
存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中(而SQL语句需要先编译然后执行),用户通过指定存储过程的名字和给定参数来调用执行它。区别:(@&@)存储过程实现的功能要更复杂一些;自定义函数的针对性更强;存储过程可以返回多个值;自定义函数只能有一个值;存储过程一般独立执行;自定义函数可以作为其他SQL语句的组成部分来实现的。原创 2024-06-17 08:03:50 · 1906 阅读 · 0 评论 -
JVM面试重点-2
如果Full GC的时候,老年代里的对象几乎没有死掉的,而新生代又要晋升活对象上来,那么Full GC结束后老年代的使用量自然就上升了。在分代收集中,新生代的规模一般都比老年代要小许多,新生代的收集也比老年代要频繁许多,如果回收新生代时也不得不同时扫描老年代的话,那么Young GC的效率可能下降不少。是Java内存模型中定义的两个操作之间的偏序关系。Eden区分配满的时候触发,Young GC时,有部分存活对象会晋升到old gen,所以young GC后old gen的占用量通常会有所升高。原创 2024-06-17 08:03:13 · 786 阅读 · 0 评论 -
JVM面试重点-1
基础数据类型,保存在虚拟机栈上。局部变量的对象引用,保存在虚拟机栈上。对象实例以及实例中非静态变量、非常量,保存在堆上。原创 2024-06-16 08:59:57 · 664 阅读 · 0 评论 -
Java多线程面试重点-2
根据经验总结,volatile最适合在一个线程写,其他线程读的场景。AQS是一个用于构建锁和同步器的框架。它是除了java自带的synchronized关键字之外的锁机制。例如ReentrantLock、ReentrantReadWriteLock、Semaphore、FutureTask等都是基于AQS实现的。原创 2024-06-15 08:46:50 · 1208 阅读 · 0 评论 -
Java多线程面试重点-1
并发:把时间分成一段一段,每个线程轮流抢占时间段。如果时间段非常短,线程切换非常快,被称为伪并行。并行:多个线程可以同时运行。原创 2024-06-14 06:13:56 · 998 阅读 · 0 评论 -
Java基础面试重点-3
Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干小任务,最终汇总每个小任务结果得到大任务结果的框架。利用了现在CUP是多核的特点。CommonClassLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat和各个webapp访问。CatalinaClassLoader:Tomcat私有的类加载器,webapp不能访问其加载路径下的class,即对webapp不可见。原创 2024-06-13 22:07:52 · 1129 阅读 · 0 评论 -
Java基础面试重点-2
,线程二获得执行时间,执行完扩容操作,线程一再次获得执行时间,会形成环形链,然后调用HashTable.get()时,出现了无限循环。如果没有,JVM就会将该异常转交给默认的异常处理器(默认处理器为JVM 的一部分),默认异常处理器打印出异常信息并终止应用程序。如果发生异常,方法会创建一个异常对象(包括:异常名称、异常描述以及异常发生时应用程序的状态),并转交给JVM。异常发生后,可能有一系列的方法调用,终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。在程序编译前,代理类已经被创建完成。原创 2024-06-12 22:10:42 · 953 阅读 · 0 评论 -
Java基础面试重点-1
概念:把对象转换为字节序列的过程。用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。在网络上传送对象的字节序列。Tips:实体类都要实现序列化接口。String类中使用final关键字修饰字符数组,所以不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,没有用final关键字修饰字符数组,所以可变。操作少量的数据 -> String单线程操作字符串缓冲区下操作大量数据 -> StringBuilder。原创 2024-06-12 22:09:46 · 2580 阅读 · 0 评论 -
业务上第一次遇到MySQL更新锁表超时(Lock wait timeout exceeded try restarting transaction)
前言:最近,我在公司开发某个业务功能,需要使用钉钉审批流,在最后一个结点审批通过后,使用MQ监听回调信息,根据回调信息,更新订单状态、触发系统还款、保存相关审批记录。如果在完美情况下,这一套流程没有任何问题,但是因为历史数据等原因,触发系统还款可能会失败。此时,审批流程已经正常结束了,不可能再走一遍流程。为了解决这样的问题,我们订单状态的“已还款”拆成“审批通过”和“已还款”,这两个结点在完美...原创 2020-04-18 21:32:19 · 2005 阅读 · 0 评论 -
一篇文章了解MySQL联合索引
一、什么叫联合索引?由两列或以上列组成的索引成为联合索引,联合索引又叫复合索引。相关概念:索引覆盖:联合索引中包含了需要查询的所有数据,不需要进行二次查询,直接返回数据。最左索引匹配原则:使用联合索引时,遵循从左边开始匹配联合索引中列,MySQL的SQL的执行过程:MySQL的优化器:...原创 2020-03-15 10:05:29 · 2641 阅读 · 1 评论 -
JVM中GC(垃圾回收机制)的十问十答
前言:GC全称Garbage Collection,它是Java语言的垃圾回收机制。在Java语言中,不需要程序员去专门编写内存回收和垃圾清除的代码,JVM会自动管理内存和清除垃圾。因此,减少了程序员对垃圾回收的关注度并降低了开发的难度,同时也减少了内存泄露和溢出引发的问题。那Java的垃圾回收机制已经“自动化”了,我们为什么还要了解GC和内存分配呢?原因是:如何我遇到内存溢出、内存泄漏和在高并发系统中GC成为系统运行瓶颈时,我们可以找出根本原因,从而进行优化。下面,我们先来学习一下GC机制的基础知识:原创 2020-06-26 08:56:06 · 1134 阅读 · 0 评论 -
数据结构十问十答
前言:数据结构主要说的是数据存储的结构,这门课在大学学习的时候,我就感觉非常晦涩难懂,每种数据结构都非常抽象,学习起来也算有些吃力,等到了工作之后,发现用到的地方还不少,又捡起来重新学习了一下大学的教材。下面,我就先介绍一下数据结构的基础知识:正文:Q&A1:数据结构的三个方面:数据的逻辑结构、数据的存储结构、数据的运算Q&A2:什么是线性表?概念:由n(n>=0)个类型相同的数据元素a0,a1,…an-1组成的有限序列。线性表分类:顺序表和链表(单链表原创 2020-08-08 11:01:56 · 501 阅读 · 0 评论 -
Java多线程十问十答(二)
前言:上篇文章中讲解了Java多线程的基础知识,详见《http://Java多线程十问十答(一)》。接下来,我们来说一说Synchronized关键字、Volatile关键字和Lock锁相关知识,具体如下:正文:Q&A1:Synchronized基础知识:1) 作用:原子性:确保线程互斥访问同步代码,原因:synchronized底层调用monitorenter(对应lock操作)和monitorexit(对应unlock操作)来操作具备原子性;可见性:共享变量变更能即时可见原创 2020-07-11 11:12:50 · 230 阅读 · 0 评论 -
网络基础知识十问十答
前言:对于java开发者来说,直接使用网络相关知识的情况很少,我们一般都是调用现成的API。但是对网络相关知识有一个宏观的理解,对我们编写相关程序是非常有好处的。下面,我将分享一些有关网络的相关基础知识。正文:Q&A1:OSI七层模型与TCP/IP五层模型:Q&A2:TCP三次握手和四次挥手:1)TCP标志位:ACK(acknowledgement 确认)、PSH(push传送)、FIN(finish结束)、RST(reset重置)、URG(urgent...原创 2020-07-25 13:34:18 · 257 阅读 · 0 评论 -
LinkedList源码,你想了解一下不?
前言:上回咱们介绍了ArrayList源码,详情见《ArrayList源码,你想了解一下不?》文章,今天来介绍一下LinkedList源码,LinkedList源码也不是很难理解,它的底层用的双链表,如果你对常用的数据结构有所了解,你在学习理解LinkedList源码中关于链表的相关方法就很容易。LinkedList与ArrayList都实现了List接口,如果你原来看过ArrayList源码,你在学习理解LinkedList源码中关于List接口相关方法就很容易。听我这么半天忽悠,你是不是也想学...原创 2020-06-03 21:22:08 · 923 阅读 · 2 评论 -
JVM中内存的十问十答
前言:JVM,全称Java Virtual Machine,即java虚拟机。它让java语言实现了“write once,run anywhere”的效果,即一次编译,到处运行 ,也就是java语言的跨平台性。简单理解就是:.java文件通过java编译器成.class文件,然后将.class文件交给不同操作系统的JVM,JVM在进行二次编译,解释执行完成相关操作。JVM还有许多特性,需要我们理解和学习,下面,我就介绍一下JVM内存方面的相关知识。正文:Q&A1:什么是JVM的内存模型原创 2020-06-20 10:11:29 · 261 阅读 · 0 评论 -
Redis基础知识十问十答
前言:Redis 是当前比较流行的非关系型数据库(NoSQL)。非关系型数据库是数据结构化存储的集合,它具有格式灵活、速度快、高扩展性的优点,而且Redis是基于内存的非关系型数据库,性能出色,每秒可以处理超过10万次读写操作。所以它非常适合互联网项目,为互联网相关系统提升性能。下面,我们就来学习一下Redis的基础知识:正文:Q&A1:什么是Redis?1) 概念:Redis(Remote Dictionary Server【远程数据服务】):是一个基于内存的高性能key-va原创 2020-08-01 19:42:06 · 399 阅读 · 0 评论 -
Java多线程十问十答(一)
前言:随着处理器的生产工艺的提升,处理器越来越趋向多核化。为了给用户更好的体验,充分利用处理器多核的特点,使用多线程技术是必然的选择。但是,Java关于线程的知识非常多又不容易理解,使用不当特别容易出事故等情况。可以说,多线程是程序员前进路上额绊脚石。...原创 2020-07-04 11:07:14 · 226 阅读 · 0 评论 -
ArrayList源码,你想了解一下不?
前言:作为一个名合格的程序员,不看看源码怎么行?ArrayList作为我们常用的一个集合类之一,它的源码不多并且不是很难,比较容易阅读理解。下面我就分析一下,我对ArrayList源码的理解。一、ArrayList数据结构:ArrayList的数据结构是一个数组(Object[] elementData),其中有size和capacity两个概念,size代表的数组中存储元素个数,capacity代表的是数组的长度。另外,ArrayList与Array的主要区别是:ArrayList是可变长度、原创 2020-05-23 14:40:58 · 377 阅读 · 0 评论 -
Java多线程十问十答(三)
前言:在这篇文章中,我将介绍一下线程池、Executor框架、ThreadLocal、CAS等相关知识,希望对大家的工作和学习有一定帮助!具体的内容如下:正文:Q&A1:线程池(ThreadPoolExecutor)的工作流程是什么?(1) 默认情况下,创建完线程池后并不会立即创建线程, 而是等到有任务提交时才会创建线程来进行处理。(除非调用prestartCoreThread或prestartAllCoreThreads方法)(2) 当线程数小于核心线程数时,每提交一个任...原创 2020-07-18 12:00:19 · 264 阅读 · 0 评论 -
MySQL的索引十问十答
前言:最近,来到新的工作岗位,时间和精力几乎都放到理解新的业务与熟悉相关技术栈上面,没有过多的时间去系统学习和总结知识。但是,我希望我每周还是可以更新一篇文章。虽然说没有很多的时间去系统学习,但原来的一些相关总结,还是可以为大家分享一下。今天,我就给大家说一说,我对MySQL索引的一些理解。正文:Q&A1:什么是索引?它是对数据库表中一个或多个列的值进行排序的数据结构。它是一个文件,占用物理空间。Q&A2:索引的优缺点是什么?优点:加快检索速度;加速表和表之间的连接;原创 2020-06-13 09:42:42 · 217 阅读 · 0 评论