- 博客(30)
- 收藏
- 关注
原创 类文件结构
类文件结构JVM能理解的代码就叫做字节码,扩展名.class,不面向任何特定处理器,只面对虚拟机。类文件结字节码结构魔数+副版本号+主版本号+常量池计数器+常量池数据区+访问标志+类索引+父类索引+接口计数器+接口信息数据区+字段计数器+字段信息数据区+方法计数器+方法信息数据区+属性计数器+属性信息数据区ClassFile { u4 magic; //Class 文件的标志 u2 minor_version;//Class 的小版本号
2020-12-10 20:50:52
144
原创 JDK监控和故障处理工具总结
JDK监控和故障处理工具总结JDK命令行工具jps (JVM Process Status): 类似 UNIX 的 ps 命令。用户查看所有 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息;**jstat**( JVM Statistics Monitoring Tool): 用于收集 HotSpot 虚拟机各方面的运行数据;jinfo (Configuration Info for Java) : Configuration Info forJava,显示虚拟机配置信息;jmap
2020-12-10 20:50:08
204
原创 JVM内存区域详细
JVM运行时数据区域在JDK1.8之前,运行时数据区域分为(堆、方法区)线程共享,进程(线程私有,包括虚拟机栈,本地方法栈,程序计数器)和直接内存,在JDK1.8之后,方法区直接内存开辟了空间叫元空间,讲方法区替代。程序计数器–线程私有内存空间较小,可以看做当前线程执行字节码的行号指示器。字节码解释器通过改变计数器值来让下一条字节码指令,分支,循环,跳转,异常处理等,耶为了每个线程跳转到正确的执行位置,每个线程有一个独立的计数器。它的生命周期随线程创建和终止。 虚拟机栈–私有,周期同线程一致J
2020-12-03 22:31:49
152
原创 乐观锁与悲观锁
乐观锁与悲观锁悲观锁(多写)假设最坏的情况,每次别人都拿到数据都会修改,所以每次拿数据都会进行上锁,只有拿到锁可以用。(共享资源每次只给一个线程用,并将其它线程阻塞,直到使用完毕)传统的关系型数据库就会用到这样的锁,行级锁,表锁,读锁,写锁等,Java中的synchronized 和 ReentrantLock都是悲观锁乐观锁(多读)默认别人拿到数据不会修改,所以不会上锁。但是在更新的时候判断一下在此期间别人有没有取更新这个数据,可以使用版本号机制和CAS算法 乐观锁用于多读的应用类型,像数据库提
2020-12-01 17:17:12
97
原创 Mybatis入门及常见问题
Mybatis框架概述框架 Framework是整个或部分系统的可重复性设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。 简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。MyBatis概述MyBatis 是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,几乎避免了所有的JDBC代码和手动设置参数以及返回结果集。通常对配置或者原生的MAP使用简单的配置文
2020-11-12 13:44:11
153
原创 JavaScript
JavaScriptJavaSscript作为一种客户端脚本语言,其发展史:1992年,nombas公司 C--,最早的客户端脚本语言。专门用于表单验证。 后更名为 scriptEarth然后由网景(scriptlive)找到sun公司合作,共同开发出JavaScrip, 微软抄袭JavaScript 定义了 JScript最终由ECMA(欧洲计算机制造商协会)定义了一套客户端脚本语言的规范 ECMAScript规范 JavaScript = ECMAScript规范 + js自己特有的东西
2020-11-09 22:24:38
100
原创 MD5算法原理及代码实现
MD5算法原理及代码实现MD5:Message-Digest Algorithm 是一种不可逆的字符串变换算法,严格来说并不能称之为加密算法。原因在于无法通过一定的密钥key进行还原,这也是为什么该算法不可逆,因为其本身是对任意长度的字符串转换为一个128bit的大整数。MD5算法加密步骤1、填充MD5加密算法可以针对大文件甚至几GB的文件进行加密,打个比方,就像是一头整牛进入加工车间,出来的是一袋冷藏肉一样,这个过程必然也是不可逆的。要加密的信息必然是不定长度的。而输出要是一个128bits的
2020-11-02 21:06:30
2039
原创 JavaScript
JavaScriptJavaScript作为一种客户端脚本语言,其发展史:1992年,nombas公司 C--,最早的客户端脚本语言。专门用于表单验证。 后更名为 scriptEarth然后由网景(scriptlive)找到sun公司合作,共同开发出JavaScrip, 微软抄袭JavaScript 定义了 JScript最终由ECMA(欧洲计算机制造商协会)定义了一套客户端脚本语言的规范 ECMAScript规范 JavaScript = ECMAScript规范 + js自己特有的东西(
2020-09-10 10:27:57
105
原创 CSS基础---网页布局div
CSS层叠样式表,用来美化页面,对html标签进行样式控制,使HTML样式更丰富,另外CSS何以解耦HTML有了CSS之后,HTML只需要定义网页元素,至于HTML元素的展示,由CSS来做。两者结合的方式:1、内联样式 将CSS写在标签上,每一个标签都会存在一个style属性,和style的值 内联样式一次只能控制一个标签的展示样式,书写凌乱。2、内部样式 将CSS抽取到一个style标签,标签定义在<head>,配合一个选择器(就是选中一个或多个标签的语法),可以复用3、外部样式 将
2020-09-06 23:04:07
137
原创 类加载机制和反射(反射与泛型)
类加载机制和反射类的加载、连接、初始化当系统在第一次使用某个类时,加载该类,也可能预加载机制来加载某个类时。加载 就是指将 class 文件读入内存,并为之创建一个 Class 对象。 任何类被使用时系统都会建立一个 Class 对象连接 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用初始化类的初始化类的初始化阶段,虚拟机负责对类进行初始化,主要是对类变量进行初始化,声明类变量时可以给定初
2020-09-02 23:38:57
168
原创 HTML初讲,表格合并及表单(网页信息采集)
HTML主流语言 CSS JS HTML JQuery和Vue库后台开发 Servlet JSP Tomcat MySQL JDBCHTML:超文本标记语言,由一系列的预定义标签组成,这些标签就是定义网页元素的,标签通过浏览器内核渲染进行展示。标签的语法结构: <a>一个链接</a> 又开始标签有结束标签叫围堵标签<hr/> 自闭和标签html最基本结构例:<html> //新建一个文本文件,后缀名.html,在文件的最前面表
2020-09-02 16:52:54
591
原创 多线程-----线程通信、定时器、线程相关类
线程通信传统的线程通信传统的线程通信中可以使用Object中的wait()和notify()、notifyAll()方法,这三个方法并不属于Thread类,而是属于Objecet类。同时,三个方法的调用必须使用同步监视器的。那么就分成两种情况,同步方法和同步代码块。 void wait (long timeout) //在其他线程调用此对象的 notify () 方法或 notifyAll () 方法,或者超过指定的时间量前,导致当前线程等待。 void notify ()
2020-08-22 14:18:06
169
原创 伪随机探究
伪随机探究随机数发生器我们很多的算法中需要随机数,因此必须有一种方法来产生它。同时我们也了解计算机的随机算法是一种伪随机。提前生成好随机序列,根据不同的随机种子函数,生成不同的随机数。产生随机数最简单的方法就是线性同余数发生器。它于1951年有lehmer首先提出,对于一个Xi满足 X(i+1)=AXimodM;为了开始这个序列,必须给Xi一个初值,这个值就叫种子(seed)。人们可能会想到要假设所有的机器在它们标准的库中都有一个至少像不溢出随机数生成器的程序,但
2020-08-20 23:07:01
1461
原创 多线程-----三种实现方法、线程安全
多线程线程和进程的区别进程就是正在运行的程序,是系统进行资源分配和调用的独立单位,进程有自己的内存空间和系统资源。线程:一个进程内部可以执行多个任务,是CPU调度的基本单位。多线程就是为了提高应用程序的使用率,多个线程抢夺时间片,CPU在多线程中执行时间长。并行和并发并发:交替执行不同的任务,类似于多线程并行:同时执行多个任务注意:JVM中至少有两个线程 main() 和gc()两个线程多线程实现-----Thread类方式一:Extends Thread类public class My
2020-08-20 22:44:44
402
原创 IO流---序列化、SequenceInputStream、RandomAccessFile
IO流序列化序列化机制允许将对象转换成字节序列,保存在磁盘上,或者通过网络传输,以备重新恢复成对象。序列化机制可以使对象脱离程序运行独立存在。序列化是指把对象通过流存储到文件中。,反序列化就是从IO流恢复成对象。使用对象流实现序列化的时候需要重写Serializable 接口才能被序列化。private static void readData() throws IOException { ObjectInputStream in = new ObjectInputStream(ne
2020-08-15 14:04:18
409
原创 IO流-----字节流基类和多级文件递归复制代码实现
IO流Java的IO流是实现输入输出的基础,将不同的输入\输出源(键盘、文件、网络连接)均抽象的称之为流。按照流的流向分,站在内存的角度,分为输入流和输出流。按照数据类型又可分为可以读写任何文件的字节流,和只能读取文本文件的字符流。两者的区别在于字节流操作的字节单元是8个字节,字符流是16个。IO流基类字节流基类–InputStream 和 OutputStream构造方法 FileOutputStream(File file) FileOutputStream(String name) Fi
2020-08-13 16:37:55
176
原创 JavaSE------异常(throw和throws区别,final、finally、finalize区别)、File类
异常 Java将异常分为 Checked异常和Runtime异常,两者区别在于编译器异常都是可以在编译阶段被处理的异常,所以系统强制处理所有可能发生的异常。而运行期异常可以处理也可以不处理。 JVM默认在main函数中收到问题时,可以自己将问题处理,然后继续运行,在无针对处理方式时,只有交给JVM处理,一般的默认处理异常机制会将异常信息和位置打印在控制台上,同时终止运行。A:异常处理的两种方式 a:try…catch…finally b:throwstry...c
2020-08-11 11:00:07
197
原创 Map集合---HashMap类遍历、Properties类、TreeMap类自然排序
Map 集合 严格来说,其实Set集合就是一种特殊的将value作为空对象打包成Entry的Map集合。Map相较于Set集合,是双列的,由key-value组成,键值唯一,value可变,可覆盖。添加功能 V put(K key,V value):添加元素。这个其实还有另一个功能?替换,如果键是第一次存储,就直接存储元素,返回null,如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值删除功能 void clear():移除所有的键值对元素 V remove
2020-08-08 10:52:26
150
原创 JavaSE-----Set集合(HashSet类及其特殊子类、TreeSet类--自然排序与定制排序代码实现)、各Set类性能分析
Set集合set集合类似于一个罐子,可以依次把多个对象放进去,罐子并不能记住顺序,实际上Set集合与Collection集合基本相同,没有额外的方法,只是不允许有重复元素。HashSet类HashSet的特点:(1)不能保证元素的排列顺序,顺序可能变化 (2)不同步,多线程同时访问需要手动代码实现 (3)集合元素值可以使NULLHashSet存储的问题:存储元素的槽位,通常称之为‘桶’,当多个元素的Hashcode值相同是,我们称之为哈希碰撞,
2020-08-06 15:28:07
176
原创 JavaSE------泛型(类型通配符、协变、逆变)、增强for循环、可变参数
泛型泛型:Java集合有一个缺点,把一个对象丢进集合里去,集合就会忘掉这个数据的数据类型,当再次取出这个对象时,需要进行强制类型转换。为了解决这个问题,引入泛型这个概念。泛型是一种推迟到创建对象,或者调用时才明确类型的特殊类型。格式: <数据类型>好处:(1)把运行时期的问题提前到编译期间,否则当你输入不当类型,运行时才会报类转换异常 (2)避免了强制转换,使用泛型 对象可以‘记住’输入类型 (3)优化了黄色警告线注意:泛型在运行期擦除,且不存在泛型类专门讲一
2020-08-06 15:25:31
163
原创 MySQL-------常见命令、简单查询语句
数据库数据库管理系统:简单的SQL语句常见的数据库管理系统Oracle MySQL DB2 Sybase表是数据库的基本组成单元,所有的数据以表格的形式组织,目的是可读性强。表包括行和列,行是数据,记录。列是字段 colum,每一个字段应该包括哪些属性,字段名、数据类型、相关的约束。SQL语句分类,DQL 查询语句 selectDML 对表当中的数据进行增删改 insert delete updateDDL 对表结构增删改查 creat drop alt
2020-08-05 22:20:20
149
原创 Javase0801---集合初讲(List,Colletion)、BigDecimal类、Calendar类、BigInteger类
BigDecimal类BigDecimal的概述为了能精确的表示、计算浮点数,Java提供了BigDecimal构造方法public BigDecimal(String val)成员方法public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)//scale 小数点后面保留几位roundingMode 取舍模式 比如四舍五入Calendar 类Calendar类的概述Calendar 类是一个抽象类,不能
2020-08-04 16:52:31
161
原创 皮卡丘的皮的JavaSe0731---包装类、正则表达式、Math类、Random类、System类
Javase 0731包装类为了对基本数据类型进行更多操作,Java针对基本数据类型,都提供了一些包装类型(引用类型)常见操作如对基本类型和字符串的之间的转换基本类型和包装类的对应: byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean(1)Integer :在对象中包装一个基本
2020-08-01 11:45:42
151
原创 StringBuffer、六种排序算法(冒泡、选择、直插、希尔、快速、基数)原理及代码实现、二分法查找
字符串缓冲区StringBuffer 线程安全的可变字符序列,StringBuffer 的构造方法: public StringBuffer(): 无参构造方法 public StringBuffer(int capacity): 指定容量的字符串缓冲区对象 public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象 public int capacity():返回当前容量。 理论值 public int lengt
2020-07-31 08:51:43
141
原创 皮卡丘的皮的Javase 0726---(==与equals,String类,Scanner类)
Javase 0724常用类续讲—(==与equals,String类,Scanner类及其它)API applicattion programming Interface Java API : 就是Java提供的类,这些类将底层实现封装起来常见对象:object 常用类,是所有类的顶层父类,所有的类都是直接或简介继承自他 (1):hashcode public int hashcode() 返回该对象的哈希码值,默认情况下该方法会根据对象的地址计算,当然
2020-07-28 09:52:36
132
原创 皮卡丘的皮JavaSe 0724---形参和返回值、包、常见修饰符、内部类
Javase 0724形参和返回值类名作为形参时,就传递一个该类的对象抽象类作为形参时,就传递一个该抽象类的子类对象接口作为形参时,就传递一个该接口的子类对象同样的,返回值为类名时,就返回一个该类的对象返回值为抽象类时,就返回一个抽象类的子类对象返回值为接口时,就返回一个接口的子类对象链式编程了解即可,以后常用包(package)的概述(1) package 包就是文件夹,用来解决同一路径下不能存在同名文件的问题 格式: package 包名 ; 注意:定义包必须是程
2020-07-25 11:03:27
120
原创 皮卡丘的皮JavaSe 0721---构造方法续讲、继承、多态
JavaSe 0721构造方法续讲面向对象方法 static:静态的的,可以修饰成员变量,此变量就被这个类的所有对象共享 且共享变量只有一份,谁最后修改这个变量,最后输出什么变量特点:随着类的加载而加载,即.class加载而加载 修饰的成员,优先于对象存在 被类的所有对象所共享 被静态所修饰的成员是属于类的,今已使用类名直接调用,可以使用对象名调用,但是不推荐 静态变量也称之为类变量 举例: 饮水机可以用静态修饰,共用 水杯注意事项:
2020-07-23 10:53:31
135
原创 皮卡丘的皮JavaSe 0717----递归、面向对象、构造方法初讲
JavaSe 0717数组续讲数组:可以存储多个数据类型一致的元素,且JAVA中数组一旦定义长度就固定了 可以存储基本数据类型,也可以存储引用数据类型(数组,类,接口) //快速生成方法 先写出方法名和返回值,然后纠错 二维数组:就是元素为一维数组的数组定义语法:动态初始化: int [][] arr=new int[3][2]; 3,表示二维数组的长度即三个一维数组 2,表示一维数组的长度举例: int [][]arr=ne
2020-07-19 11:01:28
189
原创 皮卡丘的皮JavaSE0714---运算符续将、循环、方法调用、数组初讲
Javase 0714IDEA运算符续讲逻辑运算符: 运算结果是布尔类型 (1):& 并且 只有左右两端同事为true,则最终结果为true;以下为例: int a=20; int b=10; boolean f=a==b&a>b; System.out.println(f); (2):| 或者 运算结果任意一段为true,则最终结果为true;
2020-07-16 14:12:34
237
原创 皮卡丘的皮的JavaSE0711--常量变量、进制转换
JAVASE 07111.常量:字面值常量和自定义常量字面值常量分为整数常量、小数值常量、布尔常量、字符常量、字符串常量、以及空常量自定义常量在面向对象时会讲到,以下进行举例:整数常量 int a=100;200; 3;布尔常量 boolean b=true;false;小数值常量 float c=3.13;3.1415;字符常量 char ch='b';字符串常量 String str="hello world";空常量 null 另:Java中针对整数常量提供了四
2020-07-12 15:00:55
184
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人