
Java学习笔记整理
文章平均质量分 80
记录整理java的一些基本知识
Pisces_224
当你想成功的时候,你就一个理由;当你想放弃的时候,你有千万个理由。
展开
-
ConcurrentHashMap如何保证线程安全的?
首先,ConcurrentHashMap在Java的不同版本中有不同的实现,尤其是Java 7和Java 8之间变化较大。Java 7采用分段锁,而Java 8之后改用CAS和synchronized。用户可能想知道最新的实现方式,所以我应该重点讲Java 8之后的版本。需要详细说明ConcurrentHashMap如何通过CAS操作和synchronized块来保证线程安全。转载 2025-04-26 17:07:42 · 11 阅读 · 0 评论 -
ArrayList和LinkedList的本质区别
和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。可能大部分小伙伴和我一样,能回答出“ArrayList 是基于数组实现的,LinkedList 是基于双向链表实现的。关于这一点,我之前的文章里也提到过了。但说实话,这样苍白的回答并不能令面试官感到满意,他还想知道的更多。那假如小伙伴们继续做出下面这样的回答:“ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比低,而在遍历的时候,ArrayList 的效率要高于 LinkedList。面试官会感到满意吗?转载 2023-07-31 17:28:35 · 127 阅读 · 0 评论 -
Collections集合工具类常用方法
reverse后顺序:[c赵五, e钱七, a李四, d孙六, b张三]shuffle后顺序:[b张三, c赵五, d孙六, e钱七, a李四]rotate后顺序:[e钱七, a李四, b张三, c赵五, d孙六]swap后顺序:[b张三, e钱七, d孙六, c赵五, a李四]sort后顺序:[a李四, b张三, c赵五, d孙六, e钱七]给定的list:[b张三, d孙六, a李四, e钱七, c赵五]原始顺序:[b张三, d孙六, a李四, e钱七, c赵五][我也好, 大家好, 你好]转载 2023-07-28 17:21:32 · 759 阅读 · 0 评论 -
谈谈你对Synchronized关键字的理解及使用
但是由于 JVM 具有指令重排的特性,执行顺序有可能变成 1->3->2。指令重排在单线程环境下不会出现问题,但是在多线程环境下会导致一个线程获得还没有初始化的实例。例如,线程 T1 执行了 1 和 3,此时 T2 调用 getUniqueInstance() 后发现 uniqueInstance 不为空,因此返回 uniqueInstance,但此时 uniqueInstance 还未被初始化。面试中面试官经常会说:“单例模式了解吗?给我解释一下双重检验锁方式实现单例模式的原理呗!原创 2023-07-27 09:55:41 · 531 阅读 · 0 评论 -
java基础 —— Map
Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。在遍历的时候会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap慢,因为LinkedHashMap的遍历速度只和实际数据有关,和容量无关,而HashMap的遍历速度和他的容量有关。Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。原创 2023-07-26 16:39:10 · 153 阅读 · 0 评论 -
Java 反射和动态代理
1.在反射中核心的方法是 newInstance() 获取类实例,getMethod(…) 获取方法,使用 invoke(…) 进行方法调用,通过 setAccessible 修改私有变量/方法的访问限制。2.获取属性/方法的时候有无“Declared”的区别是,带有 Declared 修饰的方法或属性,可以获取本类的所有方法或属性(private 到 public),但不能获取到父类的任何信息;转载 2023-07-21 14:25:52 · 194 阅读 · 0 评论 -
理解java Object类中的wait()和notify()
本专栏目录结构和参考文献请见100个问题搞定Java并发。转载 2023-07-21 11:49:17 · 421 阅读 · 0 评论 -
Java 多态及实例
的。转载 2023-07-21 10:46:40 · 2149 阅读 · 1 评论 -
Java8的 Stream流
Stream是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。特点:1 . 不是数据结构,不会保存数据。2. 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。保留意见:毕竟peek方法可以修改流中元素。转载 2023-07-18 09:20:11 · 308 阅读 · 0 评论 -
ReetrantLock 与 Synchronized 锁
synchronized:是在jvm层面实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常JVM也可以释放锁定,jvm会自动加锁与解锁。ReentrantLock、ReentrantReadWriteLock、StampedLock:都是对象层面的锁定,要保证锁一定会被释放,一定要把unlock操作放在finally中才安全一些。StampedLock对吞度量有巨大的改进,特别是在读线程很多的场景下。转载 2023-07-17 22:16:23 · 270 阅读 · 0 评论 -
++i和i++是线程安全的吗
但是,这样等同于让线程1和线程2串行执行,线程1在没有完成1000w次自增时不会解锁,那么线程2执行时无法获得该互斥锁,就会被阻塞起来,直到线程1释放锁。因此上面代码的输出结果,本应该是2* 1000w,但运行结果可能会比2* 1000w小,而且每次运行的结果可能不同,因为多个线程之间存在竞争关系。在线程1进行①、②步骤后,可能CPU分配给线程1的时间片用完了,现在CUP开始执行线程2,线程2对值为100的i进行自增,假设已经增加到了200,线程2时间片用完,CPU接着执行线程1,这个时候问题就来了,转载 2023-07-17 22:01:35 · 320 阅读 · 0 评论 -
SpringBoot整合SpringCloud启动注册中心报错:javax.servlet.ServletContext.getVirtualServerName()
原因是存在了两个jar包导致冲突springboot不知道该引入哪个了。(或者版本问题)原创 2023-07-15 15:56:37 · 247 阅读 · 0 评论 -
java static相关知识点
java static 作用转载 2022-07-08 14:35:54 · 303 阅读 · 0 评论 -
(个人理解)一个java应用的分层结构(dao、service、controller...)
如题现如今随着技术的不断发展,yigejava项目的构建也变的无比的简单。那么一个完整的项目涉及到不同层,不同逻辑,如何有效的区分,不至于让我们在编写/阅读代码时跳来跳去跟无头苍蝇一样乱窜呢?以下是我个人的一些拙劣看法,有不对之处或更好的还请各位小伙伴不吝赐教,谢谢!正文以一个多模块的项目(类似管理系统)作为例子:|————project项目名 |————xxx-api |————xxx-business |————xxx-common |————xxx-sy原创 2022-02-28 15:23:13 · 4065 阅读 · 0 评论 -
转载:String,Integer,Double等类型相互转换
int, String转Ingeter(定义时)Integer a=new Integer(int value); Integer a=new Integer(String value);String转IntegerInteger.valueOf("");Integer.getInteger("");String、Integer转intInteger.parseInt("");Integer a;a.intValue();Integer转float,double,longa.fl转载 2021-12-21 10:06:36 · 1107 阅读 · 0 评论 -
解决double类型数据数值太大自动转为科学计数法的问题
直接上代码import java.math.*;class TestDouble { public static void main(String[] args) { double num1 = 8.2347983984297E-7; // 小于1 double num2 = 8.2347983984297E7; // 大于1 BigDecimal bd1 = new BigDecimal(String.valueOf(num1)); BigDecimal bd2 = new BigDe原创 2021-12-09 14:27:38 · 4826 阅读 · 2 评论 -
字符数组、String、StringBuffer的相互转化,StringBuffer的一些方法
文章传送门:https://www.cnblogs.com/caiyishuai/p/9665732.html基础不牢,地动山摇。是时候好好复习一遍基础了~转载 2021-12-08 22:00:43 · 244 阅读 · 0 评论 -
Java 在字符串指定位置拼接和插入 字符串
转载于:https://blog.youkuaiyun.com/weixin_42290280/article/details/83060528 在指定位置拼接和插入字符串 在日常开发中我们经常会碰到对字符串的操作,今天就来总结下Java中对字符串的拼接。 拼接字符串可分为两种: 1.在字符串末尾添加字符串; 2.在字符串任意位置添加转载 2021-12-07 22:21:33 · 10319 阅读 · 0 评论 -
十一. Java集合(2)
1. 集合重点——Map接口Map -------- ——Hashtable < ——Properties ——HashMap <—— LinkedHashMap ——SortedMap <——TreeMap一. Map 实现类 1.2出现* | --- Map:双列数据,用于存储具有key-value键值对的数据 ---- 类似于高中的函数: y = f(x)* |----HashMap: 作为Map的主要实现类;线程不安全,效率高;原创 2021-09-03 16:17:04 · 68 阅读 · 0 评论 -
十一. Java集合(1)
一. Java集合框架概述一方面,面向对象语言,所有事物的体现都是以对象的方式,而要操作多个对象,就要对对象进行存储。另一方面,使用数组Array存储对象具有一些弊端,(为什么?)而java集合就像一种容器,可以动态地把多个对象的引用放入容器中。数组的特点及弊端:①内存方面,数组初始化后,长度确定;数组声明的类型,决定了进行元素初始化时的类型。②存储方面,数组初始化后长度不可变,不便于扩展;数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高,同时无法直接获取存储元素的个数;数组存原创 2021-09-03 16:14:15 · 238 阅读 · 0 评论 -
转载:Java环境变量PATH和CLASSPATH
Java开发中常用到环境变量的配置,下面简单介绍下Java中经常配置的环境变量:PATH和CLASSPATH。 1、PATH环境变量 1.1 作用简介 安装完JDK(Java Development Kit,Java开发套件)之后,可以在安装目录下找到两个子目录(bin目录和lib目录)。bin目录中包含着Java编译器等可执行文件。 如果要运行执行java命令,必须得执行java命令对应的可执行文件的路径,通常有两种方式: 在%JAVA_HOME%目录下执行。执行命令的时候,指明路径%JAV..转载 2021-09-01 08:52:53 · 763 阅读 · 0 评论 -
Java基础之注解与反射
文章目录1. 什么是注解?2. 什么是反射?3. 注解与反射之间的关系1. 什么是注解?2. 什么是反射?3. 注解与反射之间的关系原创 2021-08-31 21:51:09 · 667 阅读 · 0 评论 -
十. 枚举类与注解
一. 枚举类的使用如何自定义枚举类如何使用关键字enum定义枚举类Enum类的主要方法实现接口的枚举类类的对象只有有限个,确定的。当需要定义一组常量时,强烈建议使用枚举类。如果枚举类中只有一个对象,可作为单例模式使用/*枚举类的使用: 如果枚举类中只有一个对象,可作为单例模式使用如何定义枚举类?① jdk5.0之前自定义枚举类② jdk5.0时可以使用enum关键字定义枚举类 */public class SeasonTest { public static转载 2021-06-07 15:21:03 · 222 阅读 · 0 评论 -
九. 常用类(1)—— 字符串相关的类
字符串相关的类jdk8之前的日期时间APIjdk8新增日期时间APIJava比较器System类Math类BigInteger与BigDecimal一. 字符串相关的类1.1 String类String类:代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现String是一个final类,代表不可变的字符序列。字符串是常量,用双引号引起来表示,其值在创建后不可更改。String对象的字符内容是存储在一个字符数组value[]中的。/*Strin.原创 2021-06-02 19:46:38 · 288 阅读 · 0 评论 -
九. 常用类(2)—— 时间相关的类及其他
三. 日期时间API3.1 System类中获取时间戳的方法// 1. System类中的public static long currentTimeMillis()返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 //计算世界时间的主要标准有: //UTC(Coordinated Universal Time) //GMT(Greenwich Mean Time) //CST(Central Standard Time) @Test原创 2021-06-01 15:59:24 · 486 阅读 · 0 评论 -
八. IDEA使用和多线程
1. 概述高级知识点(来自尚学堂视频)第8章 多线程第9章 java常用类第10章 枚举类和注解第11 章 java集合第12章 泛型第13章 IO流第14章 网络编程第15章 java反射机制(难)第16章 java8的其他新特性第17章 java9&10&11新特性2. 完美卸载IDEA两处:①是idea安装目录所在文件夹;②是c盘安装路径程序面板——>卸载; 找到idea,右键卸载,全部勾选。卸载后最好重启电脑再重装。3.原创 2021-06-01 15:52:12 · 2898 阅读 · 4 评论 -
七. java异常
1. Error和Exception什么是异常?异常之程序中出现的意料之外的各种状况,如:文件找不到、网络连接失败、非法参数、数据空的等异常发生在程序运行期间。三种类型的异常:检查性异常:典型的是用户错误或问题引起的异常,程序无法预见。编译时不可忽略。(即编译时就会报错)运行时异常:是可以被程序员避免的异常。在编译时可以被忽略(即程序不知道,编译会通过)错误ERROR: 错误不是异常,是脱离程序员控制的问题。错误在代码中经常被忽略。例如,当栈溢出时,一个错误就发生了,他们同样编译会通过,检查转载 2021-06-01 15:47:19 · 96 阅读 · 0 评论 -
六. 面向对象
1. 什么是面向对象面向过程:从上到下一步步按顺序执行 线性思维面向对象:物以类聚,分类的模式面向对象编程:本质是以类的方式组织代码,以对象的形式(封装)数据。抽象三大特性:封装继承多态先有对象后有类,对象是具体的事物,类是对对象的抽象从代码层面,先有类后有对象,类是对象的模板。2. 回顾方法及加深方法定义:修饰符/返回类型/switch/break return区别/方法名/参数列表/异常抛出方法的调用:静态方法/非静态方法/形参和实参/值传递和引用传递/this关键字原创 2021-06-01 15:45:06 · 190 阅读 · 1 评论 -
五. Java数组
1. 什么是数组数组是相同数据类型数据的有序集合相同类型的若干个数据,按照一定的先后次序排列组合而成其中,每个数据被称作一个数组元素,每个数组元素可以通过一个下表来访问2. 数组的声明和创建首先必须声明数组变量才能在程序中使用数组,语法如下:dataType[] arrayName; //首选写法或dataType arrayName[]; //效果相同,但不是首选写法Java语言使用new操作符来创建数组,语法如下:dataType[] arrayRefVar =原创 2021-06-01 15:42:03 · 285 阅读 · 1 评论 -
四. Java方法详解
1. 何谓方法java方法是语句的集合,一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用设计方法的原则:保持方法的原子性,即一个方法只完成一个功能,有利于后期扩展。方法的命名规则:首字母小写+驼峰命名2. 方法的定义和调用方法包含一个方法头和一个方法体, 具体有:修饰符返回值类型方法名参数类型(形参,实参)方法体修饰符 返回值类型 方法名(参数类型 参数名) { ... 方法体 ... return原创 2021-06-01 15:39:17 · 163 阅读 · 0 评论 -
三. Java流程控制
1. 用户交互Scannerjava提供一个工具类,获取用户输入。java.util.Scanner可以通过Scanner类来获取用户输入。基本语法Scanner s = new Scanner(System.in);通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要 使用 hasNext()与hasNextLine()来判断是否还有输入的数据。Scanner对象next()一定要读取到有效字符后才可以结束输入对输入有效字符之前遇到原创 2021-06-01 15:32:41 · 114 阅读 · 0 评论 -
二.Java基础
一.注释书写注释是一个非常好的习惯。Java中的注释有3种:单行注释多行注释文档注释新建一个空的工程,然后在里面可建多个项目。File——>New——>Module,项目名。设置注释的颜色:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfhhmAj9-1622531030851)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-2021011214原创 2021-06-01 15:19:04 · 317 阅读 · 1 评论 -
一. java入门
JAVA入门1.java帝国的诞生1972年C诞生贴近硬件,运行极快,效率极高操作系统,编译器,数据库,网络系统等指针和内存管理,问题很头疼1982年C++诞生面向对象兼容C图形领域、游戏等取得成功,但依然很复杂要建立一个新的语言:语法有点像C没有指针和内存管理真正可移植性,一次编写,到处运行, 虚拟机面向对象类型安全高质量类库…Java初生1995年的网页简单而粗糙,缺乏互动性图形界面的程序(Applet)比尔盖茨曾说:这是迄原创 2021-06-01 14:54:05 · 132 阅读 · 0 评论