自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 四种排序及二分查找

public class Sort { /* * 选择 */ public void selectSort(int[] arr) { for(int i = 0;i < arr.length-1;i++) { for(int j = i+1;j<arr.length;j++) { if(arr[j]<arr[i]) { swap(arr,i,j); } } } } /* * 冒泡 */ public void v

2020-07-23 11:55:39 147

原创 JVM基础杂记

1.JDK1.8将方法区替换为了元空间,元空间使用的是直接内存,而不再虚拟机中。2.方法区和永久代:《Java虚拟机规范》中只规定了方法区的概念和作用,而永久代时HotSpot虚拟机对规范的一种实现方式。3.Java对象创建过程类加载检查→分配内存→初始化零值→设置对象头→执行init方法类加载检查:虚拟机执行new指令时,首先要检查这个指令的参数能否在常量池中定位到这个类的符号引用,并且...

2020-04-22 22:30:21 173

原创 多线程部分基础知识总结

一、死锁原因资源互斥、请求与保持,不可剥夺、循环等待二、sleep()和wait()sleep()方法没有释放锁,方法执行完成后线程会自动苏醒,进入就绪队列。wait()方法释放了锁,需要其他线程来唤醒。当然也可以使用wait(long timeout)来设置超时自动苏醒。三、synchronized1.修饰静态方法锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁2...

2020-04-16 10:22:51 147

转载 深入分析ThreadLocal原理[转]

深入分析ThreadLocal原理

2020-04-14 22:29:01 82

原创 集合的遍历

每种循环的实现原理:1、传统的for循环遍历,基于计数器的:遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。2、迭代器遍历,Iterator:每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可...

2020-04-12 10:38:54 223

原创 关于list理论最大大小Integer.MAX_VALUE - 8

今天看源码对list最大大小为什么是Integer.MAX_VALUE - 8产生了兴趣。目前得出以下结论:首先数组头需要存储数组大小信息以及其它的一些信息,假设数组达到了最大则数组大小需要8个字节来存储。而当留下8个数组大小时则可保证至少有8个字节(存储byte类型时恰好为8个字节,其它类型则大于8个字节)当然,由于虚拟机的限制完全不可能达到这个大小。附上stackoverflow上的一...

2020-04-11 23:11:21 1274 2

原创 String的不可变性

一、如何实现的1.String是由final修饰的2.String实际上是由一个char数组实现的,而这个char数组也是由final修饰的(同时自然也是私有的)3.String的各个方法中没有暴露内部成员字段,没有提供直接改变数组内容的机会这样一来,无法直接改变String,也无法改变char数组的地址指向,也无法直接改变char数组的内容,这样String就是真正的“不可变”了。二、...

2020-04-11 21:33:36 113

原创 Java复习杂记1

1.字节码相关问题Java是编译与解释共存的语言。JVM类加载器加载字节码文件后,通过解释器逐行解释代码,但这种方式速度较慢,因此,对于热点代码,引进了JIT编译器,JIT属于运行时编译。当JIT完成第一次编译后,会将编译好的机器码保存下来,以便下次直接调用。关于HotSpot的惰性评估:根据二八定律,消耗大部分资源的往往是一小部分热点代码,而这正是JIT需要编译的部分。...

2020-04-10 18:37:28 68

原创 JIT基础知识

一、工作原理 当JIT编译启用时(默认启用),JVM读入class文件解释后,将其发给JIT编译器。JIT编译器将字节码编译成本机机器码。 通常javac将源代码编译成字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释。但解释执行速度必然会下降。因此,引入了JIT技术,其实就是将编译过的机器码保存起来,下次直接调用。并且JVM会根据代码每次执行的情况收集信息并相应地做出一...

2020-04-10 17:14:54 327

原创 关于空格的编码问题

同样是空格1.从pdf上复制来的2.自己输入的

2020-03-17 14:48:41 297 1

原创 sql语句粘贴过来无法执行

粘贴过来的sql语句不能执行,重新写一遍就可以。。。修改多次后依旧有如下问题SELECT oi.`category_id1`,oi.`category_id2`,oi.`category_id3`,DATE_FORMAT(o.pay_time,'%Y-%m-%d') count_date,SUM(oi.`num`) num,SUM(oi.`pay_money`) moneyFROM tb_o...

2020-03-17 14:09:55 1297 4

原创 str=""疑问

LeetCode刷第8题时,在本地环境中使用str==""判断字符串为空没有问题,但提交后这样无法判空,使用.isEmpty()和equals可以第五行注释处。why?class Solution { public int myAtoi(String str) { int i = 0; int num = 0; if(str==""...

2020-03-17 00:14:14 204

原创 BigDecimal构造函数精度问题

使用字符串调用BigDecimal构造函数或者采用valueOf,但是不要直接将数字作为构造函数参数。正确:BigDecimal correctWay1 = new BigDecimal("0.1");BigDecimal correctWay2 = BigDecimal.valueOf(0.1);错误:BigDecimal wrongWay = new BigDecimal(0.1)...

2020-03-14 16:17:51 370 1

原创 JAVA8新特性

一、函数式编程理解FunctionalInterface(函数式接口)是学习Java8 Lambda表达式的关键所在。FI的定义其实很简单:任何接口,如果只包含唯一 一个抽象方法,那么它就是一个FI。为了让编译器帮助我们确保一个接口满足FI的要求(也就是说有且仅有一个抽象方法),Java8提供了@FunctionalInterface注解。简单例子:1.8之前使用匿名内部类public s...

2020-03-11 21:44:08 48

转载 String的Intern方法详解

添加链接描述

2020-03-10 12:30:16 49

转载 类加载机制基础知识

一.目标:1.什么是类的加载?2.类的生命周期?3.类加载器是什么?4.双亲委派机制是什么?二.原理 (类的加载过程及其最终产品):JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。三.过程...

2020-03-06 22:29:07 59

原创 HashMap、HashTable、CurrentHashMap基础知识

HashTable底层数组加链表实现,key和value均不可为空(由于HashTable和ConcurrentHashMap使用的是安全失败机制,这种机制会使你此次读到的数据不一定是最新的数据。,所以不能为null),线程安全。通过修改数据时锁住整个HashTable的方法来实现线程安全,所以效率低。初始大小是11,扩容length*2+1。HashMap底层数组加链表实现,key和val...

2020-03-06 16:07:49 158 1

原创 MySQL基础杂记

1.如何查看sql语句的执行性能a.使用explain命令:查看操作行数,是否使用索引(可以验证索引是否起作用),连接的类型等信息。b.使用show profiles查看执行时间2.慢查询在日志中记录运行比较慢的sql语句(需要开启)3.索引没起作用的情况a.使用like关键字的查询语句中,如果匹配字符串的第一个字符为“%”则索引不起作用。b.使用多列索引时(一个索引最多有16个字段...

2020-03-06 12:04:59 105

原创 转发和重定向

转发(forward):一次请求,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。重定向(redirect):两次请求,就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,req...

2020-03-05 17:23:19 87

原创 try,catch,finally执行顺序

1、正常执行顺序:try → catch → finally → 其他代码2、try,catch和finally和其他代码的执行条件:先执行try。只要try中有异常,catch就会执行;finally总会执行;其他代码:如果finally中没有return:其他代码会执行;如果finally中有return:其他代码不会执行;注意:finally中的语句会在return之前执行,...

2020-03-05 16:44:34 1062

原创 变量存储位置

1.静态变量随类加载而创建,存储在方法区中。2.类变量随对象创建而创建,存储在堆中。3.方法变量随方法执行而创建,存储在方法栈中。   注:不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。...

2020-03-05 16:17:59 628

原创 包装类基础知识

一、基本概念Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。位于java.lang包下。二、自动装箱和拆箱自动装箱:基本数据类型处于需要对象的环境中会自动装箱。自动装箱调用的是valueOf()方法,而不是new Integer()方法。自动拆箱:当需要一个值时,对象就会自动拆箱为值。自动拆箱调用...

2020-03-05 16:06:21 211

原创 JVM内存模型的划分浅谈

jvm内存模型共分为虚拟机栈、本地方法栈、堆、方法区和程序计数栈五个部分。程序计数器(线程私有):每个线程都有一个独立的程序计数器,计数器所记录的是虚拟机字 节码当前指令的地址。虚拟机栈(线程私有):每个线程对应一个虚拟机栈,栈中的每一个栈帧对应一个方法。每个方法被执行时都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接和方法返回地址等信息。本地方法栈(线程私有):和虚拟机...

2020-03-05 13:18:25 181

空空如也

空空如也

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

TA关注的人

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