![](https://img-blog.csdnimg.cn/20200903103411861.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java进阶学习
文章平均质量分 95
Java进阶学习
刘嘉会
这个作者很懒,什么都没留下…
展开
-
ArraylList和LinkedList的性能对比
由此可见,LinkedList比原创 2020-09-16 00:33:57 · 340 阅读 · 0 评论 -
学习总结重载和重写的区别与联系
重载(Overloading)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。...原创 2019-05-09 22:22:58 · 1108 阅读 · 0 评论 -
Java语言和C++语言的异同
Java与C++都是面向对象的语言,都使用了面向对象的思想(封装、继承、多态),由于面向对象由许多非常好的特性(继承、组合等),因此二者有很好的可重用性。主要不同点:1、Java为解释性语言,其运行过程为:程序源代码经过Java编译器编译成字节码,然后由JVM解释执行。而C/C++为编译型语言,源代码经过编译和链接后生成可执行的二进制代码,可直接执行。因此Java的执行速度比C/C++慢,但Java能够跨平台执行,C/C++不能。2、Java是纯面向对象语言,所有代码(包括函数、变量)必须.转载 2020-09-07 17:09:13 · 1386 阅读 · 0 评论 -
浅谈Java设计模式
1、简介设计模式是一套被反复使用,多数人知晓、经过分类、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被人理解、保证代码可靠性2、设计原则面向对象的基本原则1、高内聚:模块内部要高度内聚,每个类完成特定的功能2、低耦合:模块之间要降低耦合度,类之间的依赖要尽量低设计模式的六大原则:1、单一职责原则一个类只负责一个原则2、开闭原则对扩展开放,对修改关闭3、里氏替换原则所有引用基类的地方必须能透明的使用其子类的对象任何基类出现的地方原创 2020-09-06 15:18:27 · 164 阅读 · 0 评论 -
浅谈Java集合
在使用数组或链式结构的时候,将一些方法用类封装起来,无非就是一些增,删,改,查的操作,方法的机理都是一样的。所以我们可以用“多态”的思想,将实现的操作用规范制定出来。学习集合的时候实际上就是在学习规范。定义规范:抽象类或接口 定义一个接口:package edu.xaled;public interface List { public void add(Object o)...原创 2019-06-11 00:13:50 · 144 阅读 · 0 评论 -
接口和抽象类的比较
相同点:1、接口和抽象类都不能实例化2、都包含抽象方法不同点:1、接口中只有静态常量,抽象类中还有普通成员变量2、接口中只有抽象方法,抽象类中还有非抽象方法3、接口中不包含构造方法,抽象类中可=可以包含构造方法4、接口支持多继承,抽象类不支持多继承...原创 2020-09-06 14:03:48 · 162 阅读 · 0 评论 -
回顾之其他类
1、简介常用方法import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Test01_Date { public static void main(String[] args) throws ParseException { test03(); } /* * ...原创 2020-09-05 21:12:59 · 160 阅读 · 0 评论 -
回顾包装类
1、简介2、基本数据类型和包装类的转换public static void main(String[] args) { int num = 10; // 创建一个int类型的变量,值为10 Integer integer = new Integer(10); // 创建一个Integer包装类的对象,值为10 Character c = new Character('a'); Double d = new Double(12.5); /* * 包装类具有..原创 2020-09-05 20:49:42 · 117 阅读 · 0 评论 -
回顾StringBuilder和StringBuffer
String是不可变字符串,不可修改,频繁对String修改会产生许多对象,垃圾数据。String类中提供了许多方法,但没有增删改等操作。频繁对字符串进行修改操作,建议使用StringBuffer和StringBuilder,它们是可变字符串,这两个类的用法基本一致。 StringBuffer stringBuffer=new StringBuffer("Hello"); stringBuffer.append("你好"); System.out.println..原创 2020-09-05 20:22:19 · 97 阅读 · 0 评论 -
String之常量池
String不变性String中的值一旦确定则不可修改,不可修改指的是内存中的值不能修改而不是变量的值不能修改。String常量池使用双引号创建的字符称为String常量,也就是字符常量。1、字符常量被存放在内存的常量池中2、常量池中的值不会被gc回收,即gc不会清理这个区域的内容。3、多次出现的字符常量,追在常量池中创建一个String对象(JVM做了优化)常量池的位置:jdk1.6中,常量池在方法区的PermGen Space永久代中(就是一个永久保存区域)jd.原创 2020-09-05 17:50:54 · 711 阅读 · 0 评论 -
String之正则表达式
正则表达式是Java中一门独立的语言,用于检测特定字符串是否符合规则。正则表达式就是用来定义匹配的规则的。规则的定义:用法:String中支持正则表达式的用法System.out.println("aaabbb".matches("(a|b)*"));//只能是a或b位数任意 System.out.println("aaabbb".matches("([a-z]{1,})"));//只能是小写字母,并且最少有一个 System.out.prin.原创 2020-09-05 17:08:42 · 4525 阅读 · 0 评论 -
String之字符集
由于计算机只认识0和1,所以在处理各种字符时,需要对字符进行编码或解码,以便计算机能够识别和存储。编码:将字符串转换为字节数组,称为编码。解码:将字节数组转换为字符串,称为解码。...原创 2020-09-05 15:03:56 · 534 阅读 · 0 评论 -
大家好!我是刘伦斯,一个喜欢书法、摄影的计算机童鞋
import java.util.Scanner;public class 流程控制语句 { public static void main(String[] args) { Scanner s=new Scanner (System.in); for(int i=0;i<=2;i++) { int t=s.nextInt()...原创 2019-04-15 09:23:28 · 115 阅读 · 1 评论 -
String常用方法总结
package String;import java.util.Arrays;/** * @version v1.0 * @Package String * @auther LaurenceLau * @date * @description String常用方法 */public class Test_01 { public static void main(String[] args) { String string = "Hello World!.原创 2020-09-02 17:46:04 · 133 阅读 · 0 评论 -
线程间的通信
1、锁池和等待池每个对象都自带锁池和等待池锁池:当线程执行synchronized块时如果无法获取特定对象上的锁,此时会进入该对象的锁池 当锁被归还给该对象时,锁池中的huoi多i个线程会竞争获取该对象上的锁 获取对象锁的线程将执行synchronized块,执行完毕后会释放锁等待池:当线程获取该对象上的锁后,将从它上次调用wait()方法得到位置开始继续运行2、相关方法方法名 ...原创 2020-08-13 00:00:31 · 156 阅读 · 0 评论 -
线程安全问题
1、简介:多个线程同时访问共享数据是可能会出现问题,称为线程安全问题 --当多线程访问共享数据时,由于CPU的切换,导致线程只执行了关键代码的一部分,还没执行完 --此时另一个线程参与进来,导致共享数据发生异常package 线程.线程安全问题;/** * @version v1.0 * @Package 线程.线程安全问题 * @auther LaurenceLau * @date * @description */public class Ticket imp...原创 2020-08-11 23:22:10 · 567 阅读 · 0 评论 -
进程和线程的区别与联系
进程:是计算机上的程序关于某数据集合上的一次运行活动。是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其数据形式的描述。进程是程序的实体,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,程序是指令、数据及其组织形式的描述,进程是程序的实体。线程:是操作系统进行运算调度的基本单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流。一个原创 2020-08-08 14:41:14 · 1838 阅读 · 0 评论 -
深入JVM虚拟机之使用jstat命令摸清线上系统的JVM运行状态
1、对于运行中的系统,想检查JVM中的整体运行情况,最常用的工具就是jstat2、通过jstat可以查看JVM内部的内存的使用情况,还有GC的执行次数以及耗时3、通过这些指标,可以判断出系统的当前内存使用压力以及GC压力,内存分配是否合理新生代对象的增长速度1、对JVM首先要了解的,就是随着系统的运行,每秒钟会在年轻代的Eedn区分配多少对象2、 jstat -gc [PID] 1000每隔1秒中执行1次jstat统计3、举例:第一秒先显示Eden区使用了200MB内存,第.原创 2020-06-23 01:14:15 · 478 阅读 · 0 评论 -
深入JVM虚拟机之高并发交易系统应如何设置JVM堆内存的大小?
我们以一个每日百万级别的交易支付系统作为背景,来分析一下,在线上部署一个系统时,应该如何根据系统的业务来合理的设置JVM对内存的大小。系统整体架构支付订单1、上述业务流程中,最核心的环节是在用户发起支付请求的时候,会生成一个支付订单2、这个支付订单需要记录几个核心要素:-谁发起的支付?-对那个商品的支付?-通过那个渠道进行的支付?-支付的时间等等诸如此类的信息如果每日有百万笔交易,在JVM的角度来看,就是每天会在JVM中创建上百万个新的支付订单对象1、假.原创 2020-06-22 23:29:59 · 494 阅读 · 0 评论 -
深入JVM之方法调用是如何导致线程栈内存溢出的?
java.lang.StackOverflowError栈内存溢出是进行复杂运算时非常容易出现的错误栈:1、每个线程的虚拟机栈的大小是固定的,默认为1MB。2、每次线程调用一个方法,都会将本次方法调用的栈桢压入虚拟机栈里,这个栈桢里保存着方法内部的局部变量和其他信息。栈内存溢出:1、既然一个线程的虚拟机栈内存大小是有限的,那么假设不停的调用各种方法,对应的栈桢不停的压入栈中。2、大量的栈桢会消耗完毕这个1MB的线程栈内存,最终就会导致出现栈内存溢出的情况。...原创 2020-06-22 22:29:43 · 226 阅读 · 0 评论 -
深入JVM虚拟机之JVM可能会发生哪几种OOM?如何进行排查和处理?
总览:1、当JVM内存严重不足时,会抛出java.lang.OutOfMemoryError:xxxx错误2、根据实际生产经验,OOM是非常严重的问题,一般会对程序日志中的OutOfMemeoryError配置关键字告警,一经发现,立即处理。Java Heap Space :当堆内存没有足够的空间存放创建的对象时,就会抛出java.lang.OutOfMemoryError:Java heap space错误:1、请求创建一个巨大对象,通常是一个大数组2、超出预期的访问量、数据量、比原创 2020-06-22 21:53:50 · 462 阅读 · 0 评论 -
深入JVM虚拟机之什么是堆外内存?什么情况下发生堆外内存溢出或泄露?
堆内内存:1.一般情况下,一个新的对象创建在JVM内的堆上,并为其分配内存空间。堆空间由JVM垃圾回收器管理,称为堆内内存(on-heap memory)2.虚拟机会定期对垃圾内存进行回收,有时会进行一次彻底的回收Full GC3.彻底回收时,垃圾收集器会对所有分配的堆内内存进行完整的扫描,这意味一次垃圾收集对Java 应用造成的影响,跟堆的大小是成正比的,过大的堆会影响 Java 应用的性能堆外内存:1.和堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内原创 2020-06-22 16:35:28 · 1279 阅读 · 1 评论 -
深入JVM虚拟机之JVM有哪些常见的垃圾回收器?各自的特点是什么?
Java发展至今,已经推出了好几代垃圾收集器,包括Serial、ParNew、Parallel、CMS、G1以及Java11中最新的ZGC,每一代GC都对前一代存在的问题做出了很大的改善。新生代使用的垃圾收集器主要有:1.Serial收集器2.ParNew收集器3.Parallel scavenge收集器Serial收集器:1.单线程收集器,在单核CPU架构下,JDK3之前新生代的回收器的唯一选择、2.它与应用线程的执行是串行的,也就是说,执行应用线程的时候,不...原创 2020-06-22 12:08:45 · 743 阅读 · 0 评论 -
垃圾回收算法有哪些?每个算法各自有何优劣?
1.在探讨垃圾回收算法之前,首先需要介绍一下垃圾回收机制2.我们知道对无用的对象,可以进行回收然后释放空间,所以需要确定哪些对象是需要被回收的 垃圾回收机制: 1、引用计数法:当对象被引用,程序计数器+1;释放-1;当为0时证明对象未被引用,可回收 但是这个算法有明显的缺陷,对于循环引用的情况下,对象不会被回收例如下图:对象A,对象B循环引用,没有其他的对象引用A和B,但是A和B都不会被回收 2、可达性分析法:通过一些列称之为“GC Roots...原创 2020-06-22 00:58:03 · 1051 阅读 · 0 评论 -
面试官:对于堆内存,虚拟机如何进行分代管理?
JVM根据对象在内存中存活的时间长短,将堆内存分为老年代和新生代。新生代:分为Eden+(S0+S1) S0、S1统称为Survivor新生代区域比例为1:1:8Minor GC:原创 2020-06-22 00:18:16 · 120 阅读 · 0 评论 -
面试官:谈一谈Jdk8之后的虚拟机内存包含哪几个部分?做了哪些调整与改进?
JDK8之前的架构:紫色部分对于线程而言是私有的,黄色部分对于线程而言是共享的。堆:栈:本地方法栈:程序计数器:方法区(永久代)JDK8架构:最大的调整和改进:直接内存:也称为对外内存元空间:方法区的内存不够,将元空间放在JVM外部。总结:...原创 2020-06-22 00:00:47 · 385 阅读 · 0 评论 -
面试官:请你谈谈JVM类加载器机制和双亲委派模型
Java代码在编译好之后会编程.class字节码文件,加载到Java虚拟机中运行,本篇主要关于类加载器机制。Java中的类加载器大致可以分为两类,一类是系统提供的,一类是java应用开发人员编写的。系统提供的类加载器主要有以下三个:1、启动类加载器:加载的是lib目录中的类加载出来,包名是java.xxx(如:java.lang.Object)2、应用程序加载器:加载的是lib/ext目录下的类,包名是javax.xxx(如:javax.swing.xxx)3、应用程序类的加载器:.原创 2020-06-21 22:52:40 · 374 阅读 · 0 评论 -
面试官:Java代码是如何运行起来的?
Java代码到底是如何运行起来的?1、通过采用jar包的形式 2、war包---->tomcat那么实现细节是怎样的呢?编译1、写好代码后,会通过编译器将代码编成.class后缀的字节码文件。2、Java是与平台无关的,一次编写到处运行,实现语言无关性的基础就是虚拟机和字节码存储格式。3、只要编译器按照虚拟机规范,编译成对应的 .clsss 文件,这个.class文件就能被J...原创 2020-06-21 21:40:20 · 727 阅读 · 0 评论 -
Java面试之算法的性能分析:我写的代码为什么会超时?小盆友,你是不是有很多???
为什么要内存对齐?1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。Java代码编译执行...原创 2020-06-19 00:14:03 · 676 阅读 · 0 评论 -
Spring单例模式和多例模式
默认情况下scope="singleton",那么该Bean是单例,任何人获取该Bean实例的都为同一个实例;scope="prototype",任何一个实例都是新的实例;scope="request",在WEB应用程序中,每一个实例的作用域都为request范围;scope="session",在WEB应用程序中,每一个实例的作用域都为session范围;注意:在默认情况下,Bean实例在被Spring容器初始化的时候,就会被实例化,默认调用无参数的构造方法。在其它情况下,Bean将会...原创 2020-06-16 22:41:43 · 456 阅读 · 0 评论 -
以注解的方式实现AOP编程
概述:Aop,aspect object programming 面向切面编程功能: 让关注点代码与业务代码分离!关注点,重复代码就叫做关注点;切面,关注点形成的类,就叫切面(类)!面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候往业务方法上动态植入“切面类代码”。切入点,执行目标对象方法,动态植入切面代码。可以通过切入点表达式,指定拦截哪些类的哪些方法; 给指定的类在运行的时候植入切面类代码。3.2 注解方式实现AOP编程...原创 2020-06-16 15:48:59 · 1097 阅读 · 0 评论 -
代理模式(Spring Aop详解)
1.1 概述代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。举例:明星(邓紫棋)ß---经纪人<-------用户 目标 (代理)代理模式的关键点: 代理对象与目标对象。1.2 静态代理静态代理, 1) 代理对象,要实现与目标对象一样的接口;...原创 2020-06-15 21:19:44 · 285 阅读 · 0 评论 -
浅谈动态规划之查找最长公共子序列
1、什么是最长公共子序列?最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 。最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。 最长公共子串与...原创 2019-05-18 13:32:37 · 309 阅读 · 0 评论 -
生活不易,在忙也要花一分钟时间搞清分治、动态规划和备忘录的区别与联系
分治,动态规划,备忘录搞不清,遇到问题不知道应该用什么样的方法合适?分治:分治算法对问题进行分解时所遵循的原则是将待求解问题分解为若干个规模较小、相互独立且与原问题相同的子问题(不包含公共的子问题)。动态规划:对问题进行分解时所遵循的原则是将待求解问题分解为若干个规模较小、相互关联的与原问题类似的子问题(包含公共的子问题),采用记录表的方法来保存所有已解决问题的答案,...原创 2020-04-30 00:13:39 · 509 阅读 · 0 评论 -
初识动态规划(Dynamic Programming)
一、自我理解Those who cannot rememberthe past are condemned to repeat it.这里的Programming不是"编程",“规划”的意思,而是“表方法”。就是计算机中有一个存储数据的集合(缓存)将计算过的东西放在缓存里,下次再做类似的计算的时候,在缓存里去看看这个结果自己是否计算过,如果计算过,则直接将这个结果拿出来用。(...原创 2019-05-07 23:47:03 · 397 阅读 · 1 评论 -
Java-快速排序
排序算法(Sorting algorithm)是计算机科学最古老、最基本的课题之一。要想成为合格的程序员,就必须理解和掌握各种排序算法。目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的。"快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据...原创 2019-06-17 11:24:10 · 187 阅读 · 0 评论 -
简单易懂的Java数据结构之之插入排序
算法描述:假定n是数组的长度,首先假设第一个元素被放置在正确的位置上,这样仅需从1-n-1范围内对剩余元素进行排序。对于每次遍历,从0-i-1范围内的元素已经被排好序,每次遍历的任务是:通过扫描前面已排序的子列表,将位置i处的元素定位到从0到i的子列表之内的正确的位置上。将arr[i]复制为一个名为target的临时元素。向下扫描列表,比较这个目标值target与arr[i-1...原创 2020-04-21 23:08:14 · 124 阅读 · 0 评论 -
叫声小哥哥,带你去看美丽的Java数据结构之哈夫曼树
简介 哈弗曼编码:又称为霍夫曼编码,它是现代压缩算法的基础。 假设要把字符串【ABBBCCCCCCCCDDDDDDEE】转成二进制编码进行传输 可以转成ASCII编码(65-69,01000001-01000101),但是有点冗长,如果希望编码更短呢? 我们可以先自己约定5个字母对应二进制码 A B C D E ...原创 2020-04-21 16:01:44 · 282 阅读 · 0 评论 -
别烦我,我还能学,带你走进Java数据结构之图
图是由有穷非空集合的顶点和顶点之间的边组成的集合。通常表示为G(V,E),其中G表示一个图,V是G中顶点的集合,E是图G中边的集合。在线性结构中,每个元素都只有一个直接前驱和直接后继,主要用来表示一对一的数据结构;在数形结构中,数据之间有着明显的父子关系,,每个数据和其子节点的多个数据相关,主要用来表示一对多的数据结构;在图形结构中,数据之间具有任意关系,图中任意两个数据元素之间都可能相关,可...原创 2020-04-21 01:52:07 · 223 阅读 · 0 评论 -
适合给女朋友讲的Java数据结构之红黑树
红黑树的特性:1、红黑树有颜色属性。2、颜色只能是红色或黑色。3、根节点必须是黑色。4、叶子节点必须是黑色。5、叶子节点必定是空节点,红黑树定义空节点就是黑色节点。6、添加的新节点必定是红色的。7、红黑树中不能有两个连续的红色节点。...原创 2020-04-11 23:00:46 · 422 阅读 · 7 评论