- 博客(13)
- 收藏
- 关注
原创 使用lambda表达式出现Variable used in lambda expression should be final or effectively final
为什么要限制我们直接使用外部的局部变量呢?主要原因在于内存模型,我们都知道实例变量在堆上分配的,而局部变量在栈上进行分配,lambda 表达式运行在一个独立的线程中,局部变量也属于线程私有,如果肆意的允许 lambda 表达式引用局部变量,可能会存在局部变量以及所属的线程被回收,而 lambda 表达式所在的线程却无从知晓,这个时候去访问就会出现错误,之所以允许引用事实上的 final(没有被声明为 final,但是实际中不存在更改变量值的逻辑),是因为对于该变量操作的是变量副本(与匿名内部类原理一..
2021-02-22 10:49:14
1432
原创 JVM调优(二)Arthas的使用&jvm参数大小如何分配
Arthas官方文档先下载Arthas的jar包curl -O https://arthas.aliyun.com/arthas-boot.jar执行命令java -jar arthas-boot.jar执行下面程序public class HeapTest { public static void main(String[] args) throws InterruptedException { ArrayList list = new ArrayList()
2020-12-06 20:53:26
899
原创 JVM调优(一)通过字节码了解jvm运行时数据区
public class Math { public int compute(){ int a = 1; int b = 2; int c= (a + b) * 10; return c; } public static void main(String[] args) { Math m = new Math(); m.compute(); System.out.pri
2020-12-01 14:40:45
162
原创 mysql中char和varchar的区别
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择俩者的理由。char的长度是不可变的,而varchar的长度是可变的首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[1...
2020-03-15 09:42:54
232
原创 JDK与CGLIB动态代理构建过程及反向输出他们产生的代理Class文件验证代理对象
JDK动态代理:目标对象必须是某个接口的实现,通过在运行期间动态的创建(代理类)来完成对目标对象的代理接口:public interface Person { public void talk();}目标类:public class Student implements Person { @Override public void talk() { ...
2020-03-01 21:00:16
285
原创 MongoDB入门学习之Springboot整合Mongo并操作Mongo
最近在熟悉公司业务代码的时候发现使用到了MongoDB,好奇实际工程中底层是如何进行封装数据访问层的,特此学习记录一下Spring对MongoDB的操作进行了类似于JDBCTemplate的封装,集成以后可以使用MongoOperations达成我们想要的操作,或在此基础上进一步封装ps:本工程是使用注解方式配置#mongo配置mongo: host: 10.10.21.52:27...
2019-12-04 16:55:42
607
原创 ThreadLocal和InheritableThreadLocal源码学习(一)
最近在熟悉公司业务代码的时候发现有使用了ThreadLocal去控制线程变量的部分,特此学习一下ThreadLocalThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。创建ThreadLocal:这里实例化的是InheritableThreadLocal,因为这样父线程生成的...
2019-12-03 16:03:10
149
原创 JAVA经典算法之递归算法
什么是递归首先我们可以在非负整数集上定义一个函数f,它满足f(0)=0,f(x)=2*f(x-1)+x^2;从这个定义中我们可以看到f(1)=1,f(2)=6,f(3)=21;如同这样在方法体中直接或者间接调用自身的方法就叫做递归方法。public class CircleText {public static void main(String[] args) { System.out....
2018-10-10 19:26:35
372
原创 JAVASE之移位运算符详解
java移位运算符不外乎就这三种:<<(左移)、>>(带符号右移)和>>>(无符号右移)。1、 左移运算符左移运算符<< 使指定值的所有位都左移规定的次数。1.它的通用格式如下所示:value << numnum2.运算规则按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。当左移的运算数...
2018-10-09 19:49:25
200
原创 JAVASE之 数组
什么是数组?可以存储基本类型的数据和引用类型的数据,数组是一个集合,一个数组可以存储多个相同数据类型的数据数组的声明方式: type var[] 或 type[] var;例如:int a[];int[] a1;double b[];String []c; // Java语言中声明数组时不能指定其长度(数组中元素的数) 例如:int a[5]; //是错误的` ...
2018-10-04 18:55:01
205
原创 JAVASE之循环
循环语句的分类while 循环do/while 循环for 循环循环中可以使用的关键字break;(结束循环,不会继续判断) int i=0,sum=0; while(true) { i++; sum+=i; if(sum&gt;=5050) break; System.out.print(sum);输出结果为5050continu...
2018-10-02 10:50:55
198
原创 JAVASE之条件语句之switch语句
switch语句结构:switch(表达式){ case 1: 语句; break;case2: 语句; break;default:语句;}使用switch的注意事项switch(表达式)中表达式的返回值必须是下述几种类型之一:int, byte, char, short, 枚举, 字符串(jdk1.7后);case子句中的值必须是常量,且所有case子句中...
2018-09-30 17:13:32
178
原创 JAVASE之 java编程基础
1.关键字定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中所有字母都为小写(通俗的说就是在JAVA中有特殊含义的单词)例如:int,byte,short,enum,switch,return…2.标识符凡是可以起名的地方都是标识符(类名,变量,方法)起名规则:由26个英文字母大小写,数字0-9,_或$组成数字不可以开头不可以使用关键字和保留字,但...
2018-09-29 20:18:35
246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人