自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 JVM 内存分配与回收

1. JVM垃圾回收1.1 揭开 JVM 内存分配与回收的神秘面纱Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是堆内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 Java堆还可以细分为:新生代和老年代:再细致一点有:Eden空间、From Survivor、To Survivor...

2021-06-07 16:31:20 205 2

原创 JVM(详细讲解)

1. Java内存区域1.1 概述对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C++程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。1.2 运行时数据区域Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同

2021-06-07 15:09:55 189 1

原创 AQS 详细介绍

1. AQS1.1 AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器, 比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQ.

2021-06-05 20:42:00 326 1

原创 Atomic介绍

1. Atomic1.1 Atomic 原子类介绍Atomic 翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学反应中是不可分割的。在我们这里 Atomic 是指一个操作是不可中断的。即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。所以,所谓原子类说简单点就是具有原子/原子操作特征的类。并发包 java.util.concurrent 的原子类都存放在java.util.concurrent.atomic 下,如下图所示。根据操作

2021-06-05 19:08:56 4145 2

原创 线程池(详细讲解)

1.线程池1.1 使用线程池的好处线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统 的稳定性,使用线程池可以进行统一的分配...

2021-06-05 15:15:13 474 1

原创 Java并发容器讲解

并发1.并发容器1.1 JDK 提供的并发容器总结JDK 提供的这些容器大部分在java.util.concurrent包中。ConcurrentHashMap:线程安全的HashMapCopyOnWriteArrayList:线程安全的List,在读多写少的场合性能非常好,远远好于Vector.ConcurrentLinkedQueue:高效的并发队列,使用链表实现。可以看做一个线程安全的LinkedList,这是一个非阻塞队列。BlockingQueue:...

2021-06-04 21:45:20 179 1

原创 HashMap (详细讲解)

1 HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于64,那么会选择先进行数组扩容,而不是转换为红黑树),以减少搜索时间,具体可以参

2021-06-04 20:08:48 527 1

原创 LinkedList(详细讲解)

1 简介LinkedList是一个实现了List接口和Deque接口的双端链表。LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性;LinkedList不是线程安全的,如果想使LinkedList变成线程安全的 可以调用静态类Collections类中的synchronizedList方法:1.1 内部结构分析这个类就代表双端链表的节点Node。这个类有三个属性,分别...

2021-06-04 14:03:32 2096

原创 ArrayList(详细讲解)

1. ArrayList1.1 ArrayList简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。它继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable这些接口。在我们学数据结构的时候就知道了线性表的顺序存...

2021-06-03 21:11:26 2113 1

原创 Java(异常+多线程+文件与IO流)

1. 异常1.1. Java 异常类层次结构图打开百度APP看高清图片在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的Throwable 类。Throwable: 有两个重要的子类:Exception(异常)和Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执 行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问...

2021-06-03 19:59:06 190

原创 Java面向对象(详细讲解)

2.1. 类和对象2.1.1. 面向对象和面向过程的区别面向过程:面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。面向对象:面向对象易维护、易复用、易扩展。因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。打开百度APP...

2021-06-03 19:56:31 1561

原创 Java基本数据类型+方法

基本数据类型 Java中的几种基本数据类型是什么?对应的包装类型是什么?各自占用多少字节呢? Java中有8种基本数据类型,分别为:

2021-06-03 16:09:42 255

原创 Java语法(全面解析)

1. Java 语法1.1. 字符型常量和字符串常量的区别?1.形式上:字符常量是单引号引起的一个字符;字符串常量是双引号引起的若干个字符2.含义上:字符常量相当于一个整型值( ASCII值),可以参加表达式运算;字符串常量代表一个地址值(该字符串在内存中存放位置)3.占内存大小 字符常量只占2个字节; 字符串常量占若干个字节 (注意:char在 Java中占两个字节)1.1.2. 关于注释?Java 中的注释有三种:1.单行注释2.多...

2021-06-03 15:13:03 432

原创 Java基础(全面解析)

(一). 基础1. Java基本功1.1. Java 入门(基础概念与常识)1.1.1. Java 语言有哪些特点?1.简单易学;2.面向对象(封装,继承,多态);3.平台无关性(Java虚拟机实现平台无关性);4.可靠性;5.安全性;6. 支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);7. 支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程...

2021-06-03 15:10:25 119

原创 Java集合

List、Set、Map是否继承自Collection接口?List、Set 是,Map 不是。Map是键值对映射容器,与List和Set有明显的区别,而Set存储的零散的元素且不允 许有重复元素(数学中的集合也是如此),List是线性结构的容器,适用于按数值索引访问元素的情形。...

2021-05-31 19:23:06 43

原创 Java基础(二)

当一个对象被当作参数传递到一个方法后,此方法可改变这个 对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C# 中可以通过传引用或传输出参数来改变传入的参数的值。...

2021-05-31 19:15:22 216

原创 Java基础

String 是最基本的数据类型吗?不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基 本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。...

2021-05-31 17:32:38 48

原创 Java面向对象(二)

接口的意义接口的意义用四个词就可以概括:规范,扩展,回调和安全。抽象类的意义抽象类的意义可以用三句话来概括:为其他子类提供一个公共的类型 封装子类中重复定义的内容 定义抽象方法,子类虽然有不同的实现,但是定义是一致的...

2021-05-31 17:19:22 60

原创 Java面向对象

对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行 操作的一组服务组成。 类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。 当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引 用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.gc()要求垃圾回收时,垃圾回收程与系统同步运行。...

2021-05-31 17:05:17 90

原创 MyBatis资料整理(二)

15、 MyBatis实现一对一有几种方式?具体怎么操作的?有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在 resultMap里面配置association节点配置一对一的类就可以完成;嵌套查询 是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询 数据,也是通过association配置,但另外一个表的查询通过select属性配 置。16、 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式, 以及它们之间的区别?能,Mybatis不仅...

2021-05-30 20:34:56 97

原创 MyBatis资料整理(一)

请点击输入图片描述(最多18字)​1、 什么是MyBatis?MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。2、 讲下MyBatis的缓存MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口 (可用来保存对象的状态),可在它的映射文件中配置<cache/>3、Mybatis是如何进行...

2021-05-30 20:08:34 143 2

原创 SpringBoot面试整理

1、什么是 Spring Boot?多年来,随着新功能的增加,spring变得越来越复杂。只需访问 https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使 用的所有Spring项目的不同功能。如果必须启动一个新的Spring项目, 我们必须添加构建路径或添加Maven依赖关系,配置应用程序服务器, 添加spring配置。因此,开始一个新的spring项目需要很多努力,因为 我们现在必须从头开始做所有事情。Spring Boot是解决这个问题的方法。Sprin.

2021-05-29 19:21:27 53

原创 SpringCloud面试整理

1、SpringCloud面试整理1、什么是 Spring Cloud?Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程 序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微 服务框架,用于快速构建执行有限数据处理的应用程序。2、 使用Spring Cloud有什么优势?使用Spring Boot开发分布式微服务时,我们面临以下问题•与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问 题,安...

2021-05-29 17:20:12 92

原创 JVM性能优化专题(二)

10、深拷贝和浅拷贝。简单来讲就是复制、克隆。Person p=new Person(“ 张三”);浅拷贝就是对对象中的数据成员进行简单赋值,如果存在动态成员或者指针就会报错。深拷贝就是对对象中存在的动态成员或指针重新开辟内存空间。11、 System.gc()和 Runtime.gc()会做什么事情?这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。12、 finalize。方法什么时候被调用?析构函数(finalization)的目的

2021-05-29 16:08:15 103

原创 JVM性能优化专题(一)

一、Java类加载过程Java类加载需要经历一下7个过程:1 .加载加载是类加载的第一个过程,在这个阶段,将完成以下三件事情:•通过一个类的全限定名获取该类的二进制流。•将该二进制流中的静态存储结构转化为方法去运行时数据结构。•在内存中生成该类的Class对象,作为该类的数据访问入口。2 .验证验证的目的是为了确保Class文件的字节流中的信息不会危害到 虚拟机.在该阶段主要完成以下四种验证: •文件格式验证:验证字节流是否符合Class文件的规范,如主次版本号 是否在当

2021-05-29 15:06:52 48

原创 Java面试基础

面向对象特征抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类). 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。内部类静态内部类:不可访问外部的非静态资源,可以有public static abstract...

2021-05-28 21:13:38 199

原创 SpringMVC详细示例实战教程(二)

四、自动匹配参数五、自动装箱  1.编写一个Person实体类2.在Controller里编写方法六、使用InitBinder来处理Date类型的参数 七、向前台传递参数 前台可在Request域中取到"p" 八、使用Ajax调用前台用下面的Jquery代码调用 九、在Controller中使用redirect方式处理请求 十、文件上传  1.需要导入两个jar包...

2021-05-28 20:38:23 101

原创 SpringMVC详细示例实战教程(一)

1介绍MVC框架是什么MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式。它主要通过

2021-05-28 20:36:32 75

原创 Synchronized 相关问题(面试题)

问 题 一 : Synchronized 用 过 吗 , 其 原 理 是 什 么 ? 这 是 一 道 Java 面 试 中 几 乎 百 分 百 会 问 到 的 问 题 , 因 为 没 有 任 何 写 过 并 发 程 序 的 开 发 者 会 没 听 说 或 者 没 接 触 过 Synchronized。 Synchronized 是 由 JVM 实 现 的 一 种 实 现 互 斥 同 步 的 一 种 方 式 , 如 果 你 查 看 被 Synchronized 修 饰...

2021-05-28 20:11:52 246

原创 Java中比较运算符compareTo()、equals()与==的区别及应用总结

比较运算符用于判断两个数据的大小,例如:大于、等于、不等于。比较的结果是一个布尔值( true 或 false )。Java 中常用的比较运算符如下表所示:本文主要给大家介绍了关于Java比较运算符compareTo()、equals()与==区别及应用的相关内容,下面话不多说了,来一起看看详细的介绍吧1、== 和 equals的区别:==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int b= 10; a==b,返回为 true。.

2021-05-28 14:09:07 792

转载 Linux常见基本命令与用法大全

熟练使用 Linux常用的命令1> 查看文件信息:lsls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令。Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录,“…”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示。ls常用参数:图中列出的信息含义如下图所示:与DOS下的文件操作类似,在Unix/Linux系统中,也同样允许使用特殊字符来同时引用多个文件名,这些特殊字符被称为通配符.

2021-05-27 21:51:32 114

原创 Java内存模型知识

1. 概述  多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性  由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处

2021-05-27 19:27:21 32

原创 Java多线程面试题

1、为什么用线程池?有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长。而且当线程数量太多时,系统不一定能受得了。使用线程池主要为了解决一下几个问题:通过重用线程池中的线程,来减少每个线程创建和销毁的性能开销。对线程进行一些维护和管理,比如定时开始,周期执行,并发数控制等等。2、线程池参数什么意思?比如去火车站买票, 有10个售票窗口, 但只有5个窗口..

2021-05-27 16:12:08 56

原创 虚拟机

虚拟机的加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。1.加载"加载"是"类加载"这个过程的一个阶段,是 “类加载”过程中最先开始进行的操作,加载阶段,虚拟机需要完成三件事: 根据类的全限定名获取定义此类的二进制字节流; 将这个..

2021-05-26 16:51:40 38

原创 2021-05-26

技术简历怎么写大学生实习、校招技术简历禁忌!犯着必挂!很多同学都很自信。自信本不是一件坏事,相反是一件值得称赞的事情。但是盲目自信,则不可取。我见过很多同学在简历上写“精通Java”、“熟练掌握MySQL”等,或者写“熟悉Java、Python、Go、PHP语言”、“熟悉操作系统、计算机网络”等,殊不知你们所说的“精通”,可能只是“稍微了解”,你们所说的“熟练掌握”,可能只是“使用过某某技术做过几个项目”。互联网行业博大精深,任何一门技术都有很深和很广的领域范围和实现细节,每一个小领域都可以深入进去

2021-05-26 15:28:09 70

原创 2021-05-25

面试总结面试整体事项1.简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。2.推荐boss直聘,我觉得很好用(不是广告)。3.一般的整体面试流程都是电面->现场面->HR面->等着。4.不要觉得HR说让你回去等消息就是GG了,他们也要跟你之前的面试官讨论,再向领导汇报,如果说不急可能还要和其他面试者比较,所以HR让你回去等消息绝对不是说明你完蛋了。5.面试前准备

2021-05-25 19:50:58 79

原创 2021-05-25

面试经验分享找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公司,都是有一个概率在那。如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础也不好,那么你拿到offer的概率就会比较低,但是你可以多投几家公司,这样拿到offer的几率就要大一点,因为你总有运气好的时候。所以,不要惧怕面试,刚开始失败了没什么的,多投多尝试,面多了你就自然能成面霸了。得失心也不要太重,最后每个人都会有offer的。还有一个

2021-05-25 17:07:09 227

原创 2021-05-24

10个经典的 Java main 方法面试题以下是比较经典的关于Java main方法的面试题,与其说是Java面试题,其实也是Java的一些最基础知识问题,分享给大家,如有错误,请指出。1.不用main方法如何定义一个类?不行,没有main方法我们不能运行Java类。在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。2.main()方法需要的参数不是字符串数组?不是的,main()方法的参数必须是字符串数组。但是,在引进..

2021-05-24 20:43:06 43

原创 2021-05-24

Java程序员面试失败的5大原因下面是 Java 程序员面试失败最有可能的 5 大原因,当然也许这 5 点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容。#1 说得太少尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”。面试官会通过你对这些技术和非技术问题的回答来评估你的激情。他们也会通过模拟团队氛围和与你的交流互动来判断你的经验和能力。所以,仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣,还会让整个面试过程显得非常无聊。如果.

2021-05-24 20:22:54 64

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除