java
文章平均质量分 91
程序员世杰
公众号『程序员世杰』,就职过各互联网大厂,资深码农,专注Java后端技术栈、AIGC等领域的技术分享
展开
-
快手商业化 Java后端 二面|面试官很nice
面试官很nice,在答不上来的时候会引导我去思考,并在我回答正确的时候给与充分的肯定原创 2024-07-31 09:31:03 · 539 阅读 · 0 评论 -
shopee虾皮 java后端 一面面经 整体感觉不难
shopee虾皮 Java一面面经+答案详解原创 2024-07-25 15:25:19 · 1405 阅读 · 0 评论 -
字节抖音电商 后端开发岗位 一面
延时消息的实现主要依赖于RocketMQ中的定时任务机制。消息被发送到Broker时,会先存储在一个特定的延时消息队列中。Broker会定时扫描这个队列,当消息的延时时间到了,就会把消息投递到目标消费队列中。原创 2024-07-15 21:58:02 · 741 阅读 · 0 评论 -
彻底搞懂JVM垃圾回收
一文带你彻底了解JVM垃圾回收原创 2024-07-13 12:00:03 · 857 阅读 · 0 评论 -
Java对象引用的访问方式是什么?
值传递:方法参数传入的是参数的备份,对参数的修改并不会影响本身引用传递:方法参数传入的都是参数的引用,对参数的修改会影响本身Java的参数传递是值传递还是引用传递?先说结论:Java本质上都是值传递。原创 2024-07-10 14:45:17 · 804 阅读 · 0 评论 -
JVM是如何创建一个对象的?
1. Java对象创建的流程是什么样?1. JVM执行new关键字时都有哪些操作?1. JVM在频繁创建对象时,如何保证线程安全?1. Java对象的内存布局是什么样的?1. 对象头都存储哪些数据?原创 2024-07-09 14:20:23 · 1222 阅读 · 0 评论 -
你真的了解Java内存模型JMM吗?
1. 什么是Java内存模型(JMM)? 为什么需要JMM?2. Java线程的工作内存和主内存各自的作用?3. Java缓存一致性问题?4. Java的并发编程问题?原创 2024-07-08 14:25:59 · 719 阅读 · 0 评论 -
面试官:如何打破双亲委派机制?
面试连环call:1. 双亲委派机制是什么?如何打破双亲委派机制?2. JVM都有哪些类加载器?3. 如何构造一个自定义类加载器?原创 2024-07-05 13:42:51 · 1392 阅读 · 0 评论 -
千万别忽视基础!十张图带你一步步理解Java内存结构!
本文笔者将为大家详解Java内存结构。原创 2024-07-01 09:20:45 · 1574 阅读 · 0 评论 -
Maven父子项目的理解
下面是一个简略的项目结构图Parent`------ childA(BusinessLayer) `--- pom.xml`------ childB(WebLayer) `--- pom.xml`------ pom.xml1、Parent怎么能找到childA和childB呢?在maven中,parent模块组织好childA和childB,叫做"聚合",多个模块联合编译。实现起来很简单,只需要在parent的pom文件里加入以下内容。<m转载 2020-06-14 16:26:40 · 1298 阅读 · 0 评论 -
Maven到底是个啥?——Maven深入理解
一、maven1.maven简介Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。简单理解为统一管理jar包的仓库。maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。2.Maven版本管理maven中的仓库分为两种,snapshot快照仓库和rele原创 2020-06-14 16:00:57 · 1741 阅读 · 0 评论 -
CAS乐观锁的ABA问题
CAS1.CAS 原理CAS 机制当中使用了 3 个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。更新一个变量的时候,只有当变量的预期值 A 和内存地址 V 当中的实际值相同时,才会将内存地址 V 对应的值修改为 B。CAS 的原理就是预期值 A 与内存中的值相比较,如果相同则将内存中的值改变成新值 B。这样比较有两类:第一类:如果操作的是基本变量,则比较的是 值 是否...原创 2020-04-08 21:57:33 · 1243 阅读 · 1 评论 -
java处理超大数——BigInteger
一、BigInteger介绍如果在操作的时候一个整型数据已经超过了整数的最大类型长度 long 的话,则此数据就无法装入,所以,此时要使用 BigInteger 类进行操作。这些大数都会以字符串的形式传入。BigInteger 相比 Integer 的确可以用 big 来形容。它是用于科学计算,Integer 只能容纳一个 int,所以,最大值也就是 2 的 31 次访减去 1,十进制为 21...原创 2020-03-30 17:01:57 · 11261 阅读 · 2 评论 -
Java实现阻塞队列+生产者消费者
Java实现阻塞队列package test.blockqueue;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BlockQueue<T...原创 2020-03-28 23:07:25 · 595 阅读 · 0 评论 -
TCP的TIME_WAIT和CLOSE_WAIT
TCP的time_wait和close_wait原创 2020-03-27 16:20:23 · 583 阅读 · 0 评论 -
手撕单例模式
一、单例模式的关键点构造方法不对外开放,为private确保单例类只有一个对象,尤其是多线程模式下通过静态方法或枚举返回单例对象确保单例类在反序列化是不会重新创建新的对象二、单例模式的实现方式1.饿汉式(线程安全,调用效率高,但是不能延时加载)public class ImageLoader{ private static ImageLoader load ...原创 2020-03-27 15:40:46 · 807 阅读 · 0 评论 -
数据库执行SQL语句很慢的原因
一个 SQL 执行的很慢,两种情况讨论:1、大多数情况下很正常,偶尔很慢,则有如下原因(1)、数据库在刷新脏页,例如 redo log 写满了需要同步到磁盘。(2)、执行的时候,遇到锁,如表锁、行锁。2、这条 SQL 语句一直执行的很慢,则有如下原因。(1)、没有用上索引:例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引。(2)、数据库选错索引。1.数据库在刷新脏页,...转载 2020-03-27 11:23:06 · 2298 阅读 · 0 评论 -
Tomcat的非双亲委派加载
一、tomcat的非双亲委派加载双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。【违背双亲委派】: tomcat 为了实现隔离性,没有遵守这个约定,每个 webappClassLoader 加载自己的目录下的 class 文件,不会传递给父类加载器。例如:如果 tomcat 的 Common ClassLoader 想加载 WebApp ClassLo...原创 2020-03-27 11:06:09 · 295 阅读 · 0 评论 -
LinkedHashMap底层实现+LRU缓存实现
一、介绍LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。Linke...原创 2020-03-26 20:10:54 · 1024 阅读 · 0 评论 -
Java设计模式汇总
一、设计原则1、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。2、里氏代换原则(Liskov Substitution Principle)里氏代换原则中说,任何基类可以出现...原创 2020-03-11 21:15:01 · 562 阅读 · 0 评论 -
Java基础概念
1.java 基本类型的默认值和取值范围整数类型 byte(1 个字节)short(2 个字节)int(4 个字节)long(8 个字节)字符类型 char(2 个字节)浮点类型 float(4 个字节)double(8 个字节)2.Java 标识符有如下命名规则:由 26 个英文字母大小写,数字:0-9 符号:_ $ ¥ 组成标识符应以字母、_ 、$ 开头。标识符不能是关键字。...原创 2020-03-11 11:38:55 · 975 阅读 · 0 评论 -
Java常见关键字
有些关键字在之前的内容已经提到过,这里做一个总结一、final、static、abstract1.static 修饰符被 static 关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。static 作用于代码块:称作静态代码块static 方法(类方法)只能访问 static 方法,不能访问非 static 方法static 方法只能...原创 2020-03-11 10:59:22 · 802 阅读 · 0 评论 -
Java面向对象概念全解
java四大特性(抽象、封装、继承、多态)面向对象(多态、代码执行顺序,初始化顺序、)super,this一、类(一)同级类在一个.java 文件中可以有多个同级类(和 public 一样的位置,注意不是内部类),编译一个 java 文件会生成多个 class 文件。修饰符只可以 abstract/final/和无修饰符,不能是其他的 protected/private/public等修饰...原创 2020-03-10 18:22:46 · 955 阅读 · 0 评论 -
Java对象克隆详解
全局变量和局部变量值传递和引用传递序列化和反序列化深拷贝和浅拷贝原创 2020-03-09 15:27:36 · 758 阅读 · 1 评论 -
Lock底层原理
一、概述Lock 有三个实现类,一个是 ReentrantLock, 另两个是 ReentrantReadWriteLock 类中的两个静态内部类 ReadLock 和 WriteLock。LOCK 的实现类其实都是构建在 AbstractQueuedSynchronizer 上,为何图中没有用 UML 线表示呢,这是每个 Lock 实现类都持有自己内部类 Sync 的实例,而这个 Sync...原创 2020-01-19 11:03:55 · 6189 阅读 · 0 评论 -
多线程不安全的底层原因以及两种加锁方式的区别
如何保证多线程的安全运行1.线程的安全性问题体现在:原子性:一个或者多个操作在 CPU 执行的过程中不被中断的特性可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到有序性:程序执行的顺序按照代码的先后顺序执行2.导致原因:缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题3.解决办法:JDK Atomic 开头的原子类、synchronize...原创 2020-01-19 10:36:27 · 4568 阅读 · 0 评论 -
synchronized的底层实现
一、概念作用确保线程互斥的访问同步代码保证共享变量的修改能够及时可见有效解决重排序问题2.使用场景修饰代码块修饰方法(普通方法和静态方法)3.可重入锁和不可重入锁重入锁:如果某个线程试图获取一个已经由他自己持有的锁,这个请求可以成功,那么此时的锁就是可重入锁不可重入锁:当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。不可重入锁...原创 2020-01-17 17:26:42 · 1363 阅读 · 0 评论 -
atomic 包底层实现原理
一、概念介绍(一)volatile关键字Java 因为指令重排序,优化我们的代码,让程序运行更快,也随之带来了多线程下,指令执行顺序的不可控。1.volatile关键字的作用:内存可见性,修饰的变量发生改变之后对所有线程立即可见禁止指令重排序volatile的底层是通过内存屏障实现的,第一个作用是禁止指令重排。内存屏障另一个作用是强制更新一次不同 CPU 的缓存。synchron...原创 2020-01-17 16:41:33 · 3455 阅读 · 1 评论 -
集合(List、Set)遍历和Iterator迭代器
一、Iterator迭代器1.介绍迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为 “轻量级” 对象,因为创建它的代价小。Iterator,所有的集合类,都实现了 Iterator 接口(因为Collection 接口继承Iterator接口),这是一个用于遍历集合中元素的接口,并且只能单向移动。主要包含以下三种方法:...原创 2020-01-14 15:21:12 · 1968 阅读 · 2 评论 -
ConcurrentHashMap线程安全的实现原理
一、介绍1.概念ConcurrentHashMap是HashMap的线程安全版本,相对 HashMap 和 Hashtable, ConcurrentHashMap 增加了 Segment 层,每个 Segment 原理上等同于一个 Hashtable, ConcurrentHashMap 为 Segment 的数组。向 ConcurrentHashMap 中插入数据或者读取数据,首先都要讲...原创 2020-01-13 15:16:41 · 2086 阅读 · 1 评论 -
hashmap 的扩容和树形化
一、树形化//链表转红黑树的阈值static final int TREEIFY_THRESHOLD = 8;//红黑树转链表的阈值static final int UNTREEIFY_THRESHOLD = 6;/***最小树形化容量阈值:即 当哈希表中的容量 > 该值时,才允许树形化链表 (即 将链表 转换成红黑树)*否则,若桶内元素太多时,则直接扩容,而不是树形化*为了...原创 2020-01-10 16:34:32 · 2077 阅读 · 1 评论 -
JVM如何判断是否回收对象
一、引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因是它很难解决对象之间相互循环引用的问题。 所谓对象之间的相互引用问题,如下面代码所示:除了对象 objA 和 objB 相互引用着对方之外,这两个...原创 2020-01-09 10:06:09 · 666 阅读 · 0 评论 -
Java类加载器之间的关系
一、三种类加载器当 JVM 启动的时候,Java 缺省开始使用如下三种类型的类加载器:启动(Bootstrap)类加载器:引导类加载器是用 本地代码实现的类加载器,它负责将 <JAVA_HOME>/lib 下面的核心类库 或 -Xbootclasspath 选项指定的 jar 包等 虚拟机识别的类库 加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启...原创 2020-01-07 10:55:51 · 2108 阅读 · 0 评论 -
HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 区别
Map 集合中保存 Key-value 对形式的元素,访问时只能根据每项元素的 key 来访问其 valueSet 集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)一、Map接口Map 是一个映射接口,即 key-value 键值对。Map 中的每一个元素包含 “一个 key” 和 “key 对应的 value”。Abstra...原创 2020-01-06 22:16:03 · 931 阅读 · 2 评论 -
约瑟夫环问题多解法汇总
【问题】首先,让小朋友们围成一个大圈。然后,随机指定一个数 m, 让编号为 0 的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,并且不再回到圈中,从他的下一个小朋友开始,继续 0…m-1 报数… 这样下去… 直到剩下最后一个小朋友,哪个小朋友会在最后表演呢?(注:小朋友的编号是从 0 到 n-1)如果没有小朋友,请返回 - 1【题解一、数组模拟环】public int So...原创 2020-01-06 10:18:27 · 292 阅读 · 0 评论 -
Java面试知识点(九十四)Docker入门
一、Docker和虚拟机的关系1.虚拟机我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。2.容器容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包...原创 2019-11-18 11:30:09 · 365 阅读 · 1 评论 -
Java面试知识点(九十三)高效判断一个数,是不是素数
面试的时候,如果要手写算法题目,判断一个数是不是素数,可以说是非常常见的问题了,这道题目回答并不算难,但是想要以优雅高效的方法回答,却并不轻松,下面我会介绍三种方式,时间复杂度从高到低。注意:0和1既不是素数也不是合数第一种方式1.方式:从2遍历到n-12.时间复杂度:O(n)3.代码示例boolean firstMethod(int n) { if (n < 2...原创 2019-11-13 15:43:16 · 880 阅读 · 0 评论 -
Java面试知识点(九十二)搜索与回溯算法-Java实现
一、概述1.定义搜索与回溯是计算机解题中常用的算法,很多问题无法根据某种确定的计算法则来求解,可以利用搜索与回溯的技术求解。回溯是搜索算法中的一种控制策略。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或证明无解。如迷宫问题:进入迷宫后,先随意选择一个前进方向,...原创 2019-11-13 11:20:08 · 538 阅读 · 0 评论 -
Java面试知识点(九十一)Java中的引用类型
在Java中一共有四种引用类型JDK1.2 之前,一个对象只有 “已被引用” 和 “未被引用” 两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对象。所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:**强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Refe...原创 2019-11-07 14:09:42 · 560 阅读 · 1 评论 -
Java面试知识点(九十)JVM组成部分
一、计算机组成结构计算机的CPU、内存、显卡等等属于计算机的硬件常用的Windows、Linux属于计算机的操作系统而java的虚拟机,也就是我们常说的JVM是运行在操作系统之上的,与硬件没有直接联系,jvm也是java能够跨平台的根本原因。二、JVM组成部分1.Class Loader 类加载器类加载器的作用是加载类文件到内存,比如编写一个 HelloWord.java 程序,...原创 2019-11-07 11:47:19 · 833 阅读 · 0 评论