Java核心编程
文章平均质量分 64
Java核心编程
白鸽呀
这个作者很懒,什么都没留下…
展开
-
JVM 线上排查命令
jstack 是堆栈跟踪工具,主要用于打印给定进程 pid 的堆栈信息,一般在发生死锁或者 CPU 100% 的时候排查问题使用,可以去查询当前运行的线程以及线程的堆栈信息是什么情况。jcmd 11600 GC.heap_dump ./dump.hprof 指定目录文件生成当前java进程的 堆内存dump,map映射信息。jcmd pit Thread.print -l 打印指定java进程在jvm中的所有线程栈。将指定java进程在jvm中的线程栈 全部打印,追加到文件中。原创 2022-10-28 18:27:11 · 694 阅读 · 0 评论 -
Java四种引用类型及应用场景
Java的引用类型分为4种:强引用、软引用、弱引用、虚引用特点一般而言直接创建的对象,都是强引用指向的,只要有强引用指向的对象,当内存空间不足,JVM宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题,使用最普遍只要还有强引用指向一个对象,垃圾收集器就不会回收这个对象。显式地设置 置引用为 null,或者超出对象的生命周期,此时就可以回收这个对象。具体回收时机还是要看垃圾收集策略。使用场景该变量在有引用指向的时候,不希望被垃圾回收器回收2、软原创 2022-10-26 22:47:17 · 743 阅读 · 0 评论 -
JavaAgent简介和使用
Java字节码是众多字节码增强技术的知识基础。Java语言写出的源代码首先需要编译成class文件,即字节码文件,然后被JVM加载并运行,每个 class文件 具有如下固定的数据格式u4 magic;// 魔数,固定为0xCAFEBABE u2 minor_version;// 次版本 u2 major_version;// 主版本,常见版本:52对应1.8,51对应1.7,其他依次类推 u2 constant_pool_count;原创 2022-10-08 19:25:24 · 1838 阅读 · 0 评论 -
xml 中的 xml:url is not registered
有时候经常在xml中看见 这个xmlns爆红,根据提示,在setting中配置schemas and DTDs即可1、复制爆红的url2、打开设置3、增加url即可原创 2021-09-27 21:40:56 · 276 阅读 · 0 评论 -
java.net.URISyntaxException: Expected scheme-specific part at index 10: localhost
用httpclient url需要加上http:// 不能直接 写url原创 2021-09-13 16:05:10 · 3258 阅读 · 0 评论 -
二分查找基本思想与实现
基本思想1、获取低位,高位下标,求出中位数2、如果查找值key大于中位数,那么,数值key在右边。低位mid+13、再次判断low<=high , low=high为找到key的条件4、如果查找值key小于中位数,那么,数值key在左边。高位mid-15、找到返回,反之返回错误结果二分查找代码public static int binarySearch(int[] array,int key){ int low = 0; int high = array.原创 2021-08-27 17:40:37 · 351 阅读 · 0 评论 -
冒泡排序基本思想与实现
思想外层循环控制轮次,内层循环控制比较次数1、一轮确定一个最大值2、内层循环两两比较,最终确定一个最大值,放在末尾代码public static void bubbleSort(int[] array) { int length = array.length; boolean isChange = false; for (int i = 0; i < length; i++) { isChange = false;原创 2021-08-27 16:36:07 · 211 阅读 · 0 评论 -
选择排序思想与实现
基本思想外层循环控制轮次,内存循环控制比较次数1、每一轮次确定一个默认最小值,定一个minIndex指向2、内存循环将数值与最小值(minIndex指向的)逐次比较,确定这一轮的真正最小值3、将真正最小值,与默认最小值交换,确定第一个最小值4、多个轮次之后,排序成功代码public static void selectionSort(int[] array) { if (array == null || array.length <= 1) {原创 2021-08-27 16:31:40 · 133 阅读 · 0 评论 -
快速排序思想与实现
快排思想1、确定基数key,默认最左边第一个2、比基数key大的值放在右边3、比基数key小的值放在左边,分割成两个区域4、对两个子区域分别递归排序注意:在快排当中一定要判断 left < right ,不然排序过头了,代码public static void main(String[] args) { int[] array = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8,15,29,12,34,11}; quicklySort(原创 2021-08-27 16:24:58 · 75 阅读 · 0 评论 -
网络编程面试题
计算机网络体系结构在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。网络协议是什么?在计算机网络要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络协议。为什么要对网络协议分层?1、简化问题难度和复杂度。由于各层之间独立,我们可以分割大问题为小问题。2、灵活性好。当其中一层的技术变化时,只要层间接口关系保持不变,其他层不受影响。3、易于实现转载 2021-08-26 18:40:15 · 108 阅读 · 0 评论 -
JVM参数设置
1、java -jar直接在java命令后面加 JVM参数2、ideajvm参数写在vmoption中原创 2021-08-26 10:58:25 · 70 阅读 · 0 评论 -
springboot集成Quartz(简单版)job不存储数据库
1、什么是Quartzquartz是一个功能丰富的开源的任务调用系统,它可以定义很多job并发执行,支持事务和集群2、可以做什么定义任务,在任何时刻,或者某一时刻可以做想执行的任务3、Quartz 三要素:Scheduler:任务调度器,所有的任务都是从这里开始。Trigger:触发器,定期执行任务,一般有cron表达式JobDetail 任务详细Job : 定义任务具体执行的逻辑,最终执行的逻辑job 实现 QuartzJobBean ,abstractQuartzJob,任务执行原创 2021-08-25 10:34:30 · 1787 阅读 · 0 评论 -
MD5算法实现和基本原理
什么是MD5md5(message digest Algorithm)信息摘要。旨在通过对任意字符转成固定长度的加密算法算法原理算法原理:对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,原创 2021-08-15 11:29:06 · 775 阅读 · 0 评论 -
浅谈CSRF攻击方式
一.CSRF是什么?CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。二.CSRF可以做什么?你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。三.CSRF漏洞现状CSRF这种攻击方式在2000年转载 2021-08-12 14:30:47 · 1071 阅读 · 0 评论 -
为什么要使用PreparedStatement并且其能防止sql注入
1,执行效率:Statement 采取直接编译 SQL 语句的方式,扔给数据库去执行,而 PreparedStatement 则先将 SQL 语句预编译一遍,再填充参数,这样效率会高一些。JDK 文档说:SQL 语句被预编译并且存储在 PreparedStatement 对象中,其后可以使用该对象高效地多次执行该语句。2,代码可读性:Statement 中 SQL 语句中需要 Java 中的变量,加就得进行字符串的运算,还需要考虑一些引号、单引号的问题,参数变量越多,代码就越难看,而且会被单引号、双引号原创 2021-08-11 21:09:33 · 1149 阅读 · 0 评论 -
java虚拟机(JVM)面试题
Java内存区域说一下 JVM 的主要组成部分及其作用?JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。Class loader(类装载):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到Runtime data area中的method area。Execution e转载 2021-07-30 11:22:28 · 278 阅读 · 0 评论 -
什么是GC root ,GC root原理
1、GC root原理GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收。2、GC root对象是什么?Java中可以作为GC Roots的对象1、虚拟机栈(javaStack)(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。2、方法区中的类静态属性引用的对象。3、方法区中常量引用的对象。4、本地方法栈中JNI(Native原创 2021-07-30 10:20:07 · 16049 阅读 · 0 评论 -
Java基础面试题
本文转载自thinkwonJava概述何为编程编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。什么是JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大转载 2021-07-19 16:16:23 · 1004 阅读 · 0 评论 -
java多线程面试题
基础知识为什么要使用并发编程(并发编程的优点)充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能:在特殊的业务场景下,先天的就适合于并发编程。现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分 。并发编程有什么缺点并发编程的目的就是为原创 2021-07-28 22:49:12 · 541 阅读 · 0 评论 -
AQS(abstractQueuedSynchronizer)锁实现原理详解
AQS(abstractQueuedSynchronizer)锁实现原理详解AQS是什么AQS(abstractQueuedSynchronizer)抽象队列同步器。其本身是一个抽象类,提供lock锁的实现。聚合大量的锁机制实现的共用方法。AQS(abstractQueuedSynchronizer)结构图为什么要使用AQS1、我们使用的可重入锁(公平锁/非公平锁)底层实现是AQS。通过实现AQS(队列同步器)子类Sync的FairSync和NonfairSync2、为什么线程争抢锁时,没原创 2021-07-28 10:49:55 · 1074 阅读 · 0 评论 -
java综合面试题
一些大厂的面试题蚂蚁花呗一面:Java容器有哪些?哪些是同步容器,哪些是并发容器?ArrayList和LinkedList的插入和访问的时间复杂度?java反射原理,注解原理?新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法?HashMap在什么情况下会扩容,或者有哪些操作会导致扩容?HashMap push方法的执行过程?HashMap检测到hash冲突后,将元素插入在链表的末尾还是开头?1.8还采用了红黑树,讲讲红黑树的特性,为什么人家一定要用红黑树而不是AVL、B树之类原创 2021-07-25 18:15:20 · 598 阅读 · 2 评论 -
Github搜索好的开源项目
Github搜索好的开源项目GitHub关键字watch:会持续收到该项目的动态fork:复制其个项目到自己的Github仓库中star,可以理解为点赞clone,将项目下载至本地follow,关注你感兴趣的作者,会收到他们的动态Github中使用in限制搜索关键词 in:name/description/readme例如:springboot 存在于name,readme中的项目springboot in:name,readmeGithub中star和fork搜索关键字 sta原创 2021-07-25 18:13:16 · 98 阅读 · 0 评论 -
linux查看系统性能负载常用命令
linux查看系统性能负载常用命令top 查看系统整体性能/使用情况用法top [-d number] | top [-bnp]-d:number代表秒数,表示top命令显示的页面更新一次的间隔。默认是5秒。-b:以批次的方式执行top。-n:与-b配合使用,表示需要进行几次top命令的输出结果-p:指定特定的pid进程号进行观察top命令使用详解vmstat...原创 2021-07-25 17:48:24 · 590 阅读 · 0 评论 -
java中的七大GC收集器和四大GC算法
java中的七大GC收集器和四大GC算法垃圾收集器的种类和介绍1、serial 串行垃圾收集器,采用单线程收集垃圾2、parallel 并行垃圾收集器,采用多线程收集垃圾3、CMS(concurrentMarkSweep)并发标记收集 垃圾收集器,串行和并行同在,是前两种垃圾收集器的优化,较短时间进行STW(stop the world),保证较快的响应速度。4、G1 新一代垃圾收集器,采用的region分区java8中默认的垃圾收集器jps -l #查看java进程列表jinfo -原创 2021-07-24 22:58:44 · 1430 阅读 · 4 评论 -
JVM中两类错误StackOverflowError和OOM原因复现
JVM中常见的两类错误StackoverFlowErrorjava.lang.StackOverflowError (线程执行栈,栈溢出)OutofMemoryErrorjava.lang.OutOfMemoryError:java heap space (堆空间不足)java.lang.OutOfMemoryError:GC overhead limit exceeded (gc垃圾收集器负载过重,就是gc也回收不了垃圾)java.lang.OutOfMemoryError:Direct原创 2021-07-24 21:15:53 · 1065 阅读 · 0 评论 -
java中的Reference,SoftReference,WeakReference,PhantomReference
java中的引用对象类型java中的引用类型分别是强引用,SoftReference,WeakReference,PhantomReference。我们平常中产生的对象绝大部分是强引用类型,下来来分别介绍。java强引用对象Object o = new Object;String s = "aa";等等。。。。。。。特点当内存不足,JVM开始通过垃圾回收器进行垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,因为存在引用指向这它,我们平常创建的对象都是强引用对象。要将原创 2021-07-24 18:12:07 · 195 阅读 · 0 评论 -
java死锁原因和解决
死锁简单点来说,两个或两个以上的线程情景下,线程A持有锁资源A,但是还想要资源B,于是请求B锁,线程B持有锁资源B,但是还想要资源A,于是请求A锁。两者互不释放锁,又想获得对方资源。死锁条件1、请求保持2、资源不可剥夺3、资源互斥访问4、循环等待实例public class DeadLock { public static void main(String[] args){ String resourceA = "resourceA"; Str原创 2021-07-23 11:27:31 · 1113 阅读 · 0 评论 -
Result Maps collection already contains value for xxx
mybatis逆向工程问题Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xiaoxu.blog.mapper.CategoryMapper.BaseResultMap at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:872) ~[mybatis原创 2021-03-04 22:06:18 · 237 阅读 · 1 评论 -
mybatis拦截器实现原理
原文https://blog.csdn.net/weixin_39494923/article/details/91534658一.背景在很多业务场景下我们需要去拦截sql,达到不入侵原有代码业务处理一些东西,比如:分页操作,数据权限过滤操作,SQL执行时间性能监控等等,这里我们就可以用到Mybatis的拦截器Interceptor二.Mybatis核心对象介绍从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:Configuration 初始化基础配置,比如MyBat转载 2021-03-04 22:01:26 · 1567 阅读 · 1 评论 -
关于 RequestContextHolder
原文:https://www.cnblogs.com/winstonehome/p/13576385.htmlRequestContextHolder可以获取当前的HttpServletRequestHttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest();实现原理 ThreadLocalThreadL转载 2021-03-04 21:49:09 · 480 阅读 · 1 评论 -
redis工具类(仅供参考)
17、redis工具类@Componentpublic class RedisUtil { @Autowired private RedisTemplate<String, Object> redisTemplate; public RedisUtil(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; }原创 2021-03-03 22:38:07 · 402 阅读 · 1 评论 -
从linux安装到完整项目部署到项目运行(全流程)
从linux安装到项目部署到运行linux介绍ECS购买配置使用secureCRTlinux目录结构启动secureCRT通过linux命令操作linux使用vsftpRush上传文件到linuxjavajdk安装linux mysql安装linux tomcat8安装linux tomcat中部署maven项目linux介绍linux是一般用来部署项目。安装linux操作系统,一般可以采用...原创 2020-04-07 16:44:55 · 1981 阅读 · 0 评论