核心技术
文章平均质量分 77
java核心技术
成长的小牛233
一个很菜,仍然热爱技术热爱生活的程序猿
展开
-
java核心技术-jvm基础知识
文章目录JVM回顾JVM、JRE、JDK之间关系?Java程序执行过程?java虚拟机内存管理jvm整体架构jvm运行时内存程序计数器虚拟机栈本地方法栈堆元空间方法区运行时常量池直接内存OOM异常JVM类加载机制类加载系统类加载器双亲委派模型自定义类加载器ClassLoader源码剖析垃圾回收机制及算法如何判断对象已经死亡?面试:讲讲常见的垃圾收集算法?面试:垃圾回收器了解?讲讲几种垃圾回收器?我理解的垃圾回收器Serial[ˈsɪəriəl]收集器ParNew收集器Parallel(并行)[ˈpærəle原创 2021-01-17 16:03:25 · 761 阅读 · 1 评论 -
java核心技术-多线程并发设计原理以及常见面试题
文章目录多线程回顾Thread和Runnablesynchronizedwait和notifyinterruptedException和interrupt()方法如何优雅的关闭线程并发核心概念并发与并行同步不可变对象原子操作和原子变量共享内存与原子传递并发问题数据竞争死锁活锁资源不足优先权反转JMM内存模型JMM和happen-beforevoliate关键字final关键字多线程回顾Thread和Runnablesynchronizedwait和notifyinterruptedExceptio原创 2021-01-17 13:29:48 · 582 阅读 · 2 评论 -
【待完成】并发包下常用到线程工具类汇总
countDownLatchsemaphorecyclicBarrieThreadPoolExecutorimport org.junit.Test;import java.util.ArrayList;import java.util.HashMap;import java.util.concurrent.*;public class MyTest { /** * countDownLatch使用一:一个线程等待其他多个线程都执行完毕,再继续自己的工作 .原创 2020-11-14 23:14:08 · 680 阅读 · 0 评论 -
基于CompletableFuture并发任务编排实现
文章目录并发任务编排实现不带返回值/参数传递任务串行执行并行执行并行执行-自定义线程池串并行任务编排并发任务编排实现其实Java8中提供了并发编程框架CompletableFuture,以下结合不同场景进行使用。不带返回值/参数传递任务模拟任务代码: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); class TaskA implements Runnable{原创 2021-06-02 00:19:01 · 1489 阅读 · 5 评论 -
如何合理的配置线程数?
文章目录题记Java并发编程实战美团技术团队追求参数设置合理性线程池参数动态化题记我想不管是在面试中、还是工作中,我们总会面临这种问题,那么到底有没有一种计算公式去告诉我们如何去配置呢?答案是:没有想要合理的配置线程池参数,首先我们需要明白我们的任务是计算型还是IO密集型以及和CPU核数之间的关系。Java并发编程实战该书中推荐的计算方式线程数 = CPU 核心数 *(1+平均等待时间/平均工作时间)我觉得将这个公式转换一下更好理解线程数 = CPU 核心数 *(平均等待时间 + 平原创 2021-05-31 18:27:28 · 468 阅读 · 1 评论 -
深入剖析线程池基本原理以及常见面试题详解
文章目录面试官:能给我讲讲线程池的实现原理?线程池类继承关系ThreadPoolExecutor核心数据结构面试官:给我讲讲线程池的有哪些参数?面试官:如何优雅的关闭线程?线程的生命周期面试官:线程池哪五种状态?面试官:线程池哪4种拒绝策略?并分别说一下作用和实现原理?DiscardOldestPolicyAbortPolicyDiscardPolicyCallerRunsPolicy面试官:线程池常用的阻塞队列有哪些?能说下各自的区别?SynchronousQueue应用PriorityBlockedQu原创 2021-02-27 23:01:03 · 742 阅读 · 0 评论 -
记录一次服务进程强行退出的问题排查过程
场景:我这边从Hbase跑一亿多的全量数据录入Elasticsearch中,跑了四个多小时,程序突然挂掉了,然后我就纳闷了,为啥突然挂掉了???思路1:是不是Java 进程抛出OOM异常?分析程序日志没有任何异常,如果出现这种异常应该会在日志中打印的啊,怎么没有呢?如果是java OOM异常会打印 Java heap space的Exception in thread "pool-13-thread-25" java.lang.OutOfMemoryError: Java heap spaceEx原创 2021-02-08 17:31:00 · 494 阅读 · 2 评论 -
多线程场景下利用ThreadLocal是线程安全?
多线程测试代码:package com.gome.search.indexer.join.cat3.partiton.osop.utils;import java.util.UUID;import java.util.concurrent.*;public class ThreadLocalMultiThread { ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static原创 2021-02-06 00:32:04 · 1498 阅读 · 5 评论 -
什么叫死锁?死锁案例?死锁必须满足哪些条件?如何定位死锁问题?有哪些解决死锁策略?哲学家问题?
死锁是什么?死锁一定发生在并发环境中,死锁是一种状态,当两个(或者多个线程)相互持有对方所需要的资源,却又都不主动释放手中持有的资源,导致大家都获取不到自己想要的资源,所有相关的线程无法继续执行。死锁案例import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @au...原创 2020-04-28 11:07:50 · 492 阅读 · 0 评论 -
java 自定义类加载器
import org.apache.commons.io.IOUtils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class LocalClassLoader extends ClassLoader {...原创 2020-04-06 20:02:13 · 204 阅读 · 0 评论 -
java中String、StringBuffer equals使用注意
equals方法我们知道每个类其基类都是Object,Object默认的equals方式是:public boolean equals(Object obj) { if (this == obj) {//先进行地址比较 return true; }上面可以看出Object的equals方法比较两个对象的地址是否相等。接着我们来说下S...原创 2020-03-02 22:59:19 · 593 阅读 · 0 评论 -
【使用注意】Boolean是final类型,值初始化后不能被更改
由于服务代码逻辑需要在map中的value存储Boolean,后面的代码逻辑 中我想更改Boolean的值发现更改不了,后来查找资料才发现原来Boolean实现类是定义为final,还是对原理不了解呀,以后多注重原理。测试代码(final类): HashMap<String,Boolean> map = new HashMap<String, Boolean>(); ...原创 2019-05-08 11:54:57 · 1819 阅读 · 2 评论 -
【转载保存】java静态方法继承与保存的问题
结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏. 原因: 1).静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承...转载 2019-04-18 10:08:39 · 128 阅读 · 0 评论 -
【转载保存】Java 8 Lambda实现原理分析
怒学Java8系列一:Lambda表达式介绍Java 8 Lambda实现原理分析转载 2019-04-13 23:19:55 · 311 阅读 · 0 评论 -
重写equals和hashcode达到HashSet对象集去重的实现
public class Contract { private String contractId; private String contractName; private Date begin; private Date end; @Override public boolean equals(Object o) { if...原创 2019-03-18 00:12:34 · 278 阅读 · 0 评论 -
【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子
https://blog.csdn.net/gongxinju/article/details/69963099转载 2018-10-30 16:14:54 · 217 阅读 · 0 评论 -
设置三个线程顺序打印数字问题(转载)
第一种方法:通过共享对象锁的方式实现 记住调用wait方法时候需要在同步代码块内,否则会报java.lang.IllegalMonitorStateException异常!package com.test;class Prints { public int num = 0; synchronized public void methodA() throws Interru...原创 2018-06-30 16:01:17 · 1250 阅读 · 0 评论 -
Resources.getResourceAsStream用法
Resources(com.ibatis.common.resource.*) Resources 类为从类路径中加载资源,提供了易于使用的方法。处理 ClassLoader 是一项富于挑战的工作,尤其是应用服务器/容器的情况下。Resources 类试图简化这些工作,Resources 类常用于以下几种情况: 1.从类路径加载 SQL Map 配置文件(如 sqlM...原创 2018-05-17 17:53:48 · 28277 阅读 · 0 评论 -
北京市(朝阳区)(西城区)(海定区)正则表达式(代码保存)
“ String str = “北京市(朝阳区)(西城区)(海定区)”; String ptr = “.*?(?=\()”; Pattern p = Pattern.compile(ptr); Matcher matcher = p.matcher(str); if(matcher.find()){ ...原创 2018-05-07 20:03:06 · 886 阅读 · 0 评论 -
java调用类中的静态变量时类中静态代码块什么情况会执行以及类的初始化问题?
类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化: 第一种:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有...原创 2018-05-03 22:59:53 · 3788 阅读 · 0 评论 -
为什么可以通过类名调用静态方法?
JVM加载类: 所有的类都是在对其第一次使用时,动态加载到JVM中的。当程序创建第一个类的静态成员的引用时,就会加载这个类,进而可以得到该类的类型信息,而类型信息可以在程序运行时发现和使用类型信息。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当做对类的静态成员的引用。为什么通过类名可以调用静态方法? ...原创 2018-05-03 21:00:21 · 4596 阅读 · 0 评论 -
获得Class引用的三种方式?Class.forName()、getClass以及.class的使用
上代码!!!package com.spring.partise;class A{ static{ System.out.println("I am A"); }}public class helllo { public static void main(String[] args) throws Exception { Sy...原创 2018-05-03 20:23:04 · 1143 阅读 · 0 评论 -
java核心技术-线程池基本原理以及常见面试题
文章目录线程池的实现原理线程池类继承关系ThreadPoolExecutorExecutor四种工具类ScheduledThreadPoolExecutorCompletableFuture用法线程池的实现原理线程池类继承关系ThreadPoolExecutorExecutor四种工具类ScheduledThreadPoolExecutorCompletableFuture用法...原创 2021-01-17 14:02:33 · 434 阅读 · 0 评论 -
jdk、cglib动态代理代码示例
jdk动态代理实现步骤新建一个接口新建一个接口的实现类新建一个代理类,实现InvocationHandler接口,实现invoke方法-> method.invoke(…)在代理类中创建代理方法newProxy,传入目标对象,通过目标对象获取类加载器、类接口,调用Proxy.newProxyInstance方法获取代理对象通过代理对象调用具体方法代码示例新建一个接口package com.demo.rpc.proxy;public interface NewsService原创 2020-09-28 10:57:50 · 335 阅读 · 0 评论 -
java中钩子方法 addShutdownHook 学习使用
钩子作用:在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:触发条件:程序正常退出使用System.exit()终端使用Ctrl+C触发的中断系统关闭使用Kill pid命令干掉进程转载 2020-09-27 17:11:37 · 1420 阅读 · 0 评论 -
Java 回调 (Callback) 接口学习使用
Java 回调 (Callback) 接口学习使用1.什么是回调(Callback)?回调函数,简称回调,是指通过函数参数传递到其他代码的某一块可执行代码的引用,这一设计允许了底层代码调用在高层定义的子程序。简单来说:A调用了B的b()方法,那b方法如果包含对A中实现的逻辑的调用,这个过程就被称作回调。2.Java代码示例package callback;public class MQ { class Producer{ public void send(Str原创 2020-09-22 14:44:33 · 1307 阅读 · 0 评论 -
阿里巴巴Java开发手册-日志规约
1.【强制】 应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用的SLF4j中的API。使用门面模式的日志框架吗,有利于维护和各个类的日志处理方式统一。 import org.slf4j.Logger; import org.slf4j.LoggerFactory; Logger logger = LoggerFactory.getLogger(JunitTestMyDemo.class);【强制】日志文件推荐至少保存15天【强制】日志命名规则:appNam原创 2020-09-01 19:35:32 · 983 阅读 · 0 评论 -
阿里巴巴Java开发手册-finally块必须对资源对象、流对象进行关闭操作,如果有异常也要做try-cach操作
对于JDK7及以上版本,可以使用try-with-resources方式使用方式: /** * https://www.cnblogs.com/itZhy/p/7636615.html * 其实这种方式只是语法糖,反编译以后还是tryCacheThrowTest()中的代码 * https://www.cnblogs.com/langtianya/p/5139465.html * Throwable#addSuppressed()作用:通常在finall.原创 2020-09-01 19:11:09 · 676 阅读 · 0 评论 -
java 8、9、10、11新特性学习
java8:https://www.runoob.com/java/java8-streams.html java9:https://www.runoob.com/java/java9-new-features.html java10:https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-10/index.htm...原创 2019-11-27 11:44:32 · 233 阅读 · 0 评论 -
【转载保存】java8新特性学习
编者注:Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。在Java Code Geeks上已经有大量的关于Java 8 的教程了,像玩转Java 8——lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java 8中抽象类与接口的比较。我们也在其他地方引用了15个必读的Java 8教程。当然,我们也探究了...转载 2019-11-27 10:29:11 · 135 阅读 · 0 评论 -
亲测!FileUtils不是线程安全的使用注意
原创 2019-11-19 10:38:02 · 734 阅读 · 0 评论 -
SimpleDateFormat(线程不安全)与DateTimeFormatter(线程安全)
https://www.liaoxuefeng.com/wiki/1252599548343744/1303985694703650原创 2019-11-17 10:57:02 · 4894 阅读 · 0 评论 -
正则表达式大全
[正则表达式]文本框输入内容控制整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$只能输入数字:"^[0-9]*$"。只能输入n位的数字:"^\d{n}$"。只能输入至少n位的数字:"^\d{n,}$"。只能输入m~n位的数字:。"^\d{m,n}$"只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。只能输入有两位小数的正实数:"^[0-9]+(.[...转载 2019-08-15 13:02:10 · 321 阅读 · 0 评论 -
【待解答】文件目录可以利用foreach边遍历边删除操作,为什么?
@Test public void demoTestDitDel() { File file = new File(util.Directory.GetAppPath("test")); File[] fs = file.listFiles(); for (File f : fs) { f.delete(); System.out.println("del"); ...原创 2019-07-04 14:49:40 · 326 阅读 · 0 评论 -
java几种遍历方式以及效率对比
几种遍历方式:/** * */package effectiveUse;import java.util.Iterator;import java.util.List;/** * @author weijie * * 2019年4月13日 */public class ForEachList { /* * 方式1:开始时候 */ public void...原创 2019-04-13 23:31:59 · 1330 阅读 · 0 评论