- 博客(35)
- 收藏
- 关注
原创 Redis为何快_
a、因为redis是跑在单线程环境下(只针对客户端而言),所有操作都是顺序进行的,但是IO操作本身是非常耗时的,如果恰好有一个操作阻塞很久后面的命令就都无法正常执行,IO多路复用就是为了解决这个问题.b、IO主要分为磁盘IO和网络IO,以网络IO为例。
2022-09-20 11:41:43
307
1
原创 深入理解JVM虚拟机
使用哪种分配方式是由java堆是否规整,而这又是由其垃圾收集器是否有压缩整理的能力决定的.因为Serial、ParNew使用的是标记-复制算法,所以采用的是“指针碰撞”,而CMS这种是基于标记-清除算法实现的理论上就是“空闲列表”(实际上CMS为了实现更快分配,设计了一种分配缓存区,就是通过空闲列表拿到一大块内存之后,然后使用指针碰撞来实现):通过一系列的“GC Roots”的跟对象做为起始点,根据引用关系向下搜索,搜索过程的路径称为“引用链”,如果某个对象和GC Root不可连时,就认为该对象不再使用.
2022-08-25 16:43:29
844
原创 Linux常用命令
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用ls -ll,会显示成字节大小,而ls- lh会以KB、MB等为单位进行显示,这样比较直观一些。linux如何查询文件及文件夹大小?通过命令du -h –max-depth=1 *,可以查看当前目录下各文件、文件夹的大小,这个比较实用。linux如何查询文件及文件夹大小?查询当前目录总大小可以使用du -sh,其中s代表统计汇总的意思,即只输出一个总和大小。linux如何查询文件及文件夹大小?同样,通过命令du -h –max-
2020-12-07 16:16:34
70
原创 Effect java规范总结
一、创建和销毁对象**第一条:考虑用静态工厂方法代替构造器** 1、静态工厂方法有名称,可以更易于阅读。 (a)jdk最佳实践:`new BigInteger(int, int, Random) 更改为 BigInteger.probablePrime()`返回素数。 使用场景:某各类需要多个相同参数的构造器,建议使用该技术可以很好的区分意图。 2、静态工厂方法不必再每次...
2018-12-14 12:31:47
535
原创 Spring笔记
备注该笔记并非全部原创,主要做一个学习积累,后期不断更新补充。一、spring IOC与DI(1)概念解释:https://blog.csdn.net/qq_22654611/article/details/52606960(2)IOC控制反转:控制是指谁来创建对象,传统应用程序对象的创建是由程序本身创建,使用spring后则交由spring容器创建;反转是指程序本身不去创建对象,变为被动接...
2018-10-30 18:56:02
218
转载 JNDI、JMS和JTA
什么是JNDIJNDI全面总结 原理: 在DataSource中事先建立多个数据库连接,保存在数据库连接池中。当程序访问数据库时,只用从连接池中取空闲状态的数据库连接即可,访问结束,销毁资源,数据库连接重新回到连接池,这与每次去直接访问数据库相比,会节省大量时间和资源。 JNDI( Java Naming and DirectoryInterface
2018-01-06 12:30:29
551
原创 对象创建过程
对象的创建过程: 1.指令参数能否在常量池中定位到一个类的符号引用; 2.检查这个符号引用代表的类是否已经被加载、解析和初始化,如果没有必须先执行类加载过程; 3.类加载检查通过后,虚拟机分配内存(对象的内存大小在类加载完成后就可以确定)。内存分配有“指针碰撞”和“空闲列表”两种方式。 首先先解释一下“指针碰撞”–假设java堆内存是绝对完整的,那么用过的内存放在一边,空闲的内存放在一边,中
2017-10-20 11:01:35
489
转载 Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象: class字节码文件是根据JVM虚拟机规范中规定的字节码组织规则生成的、具体cla
2017-08-20 12:04:31
248
转载 Filter过滤器使用
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随
2017-07-19 16:47:13
608
原创 Java集合系列02--LinkedList
LinkedList(1)LinkedList是一个继承与AbstractSequentialList的双向链表。它也可以被当做堆栈、队列和双向队列使用。 (2)LinkedList实现了List接口,能对它进行队列操作。 (3)LinkedList实现了Deque接口,即可以当做双端队列使用。 (4)LinkedList实现了Cloneable,即可以覆盖clone()方法。 (5)Lin
2017-07-11 17:55:45
226
原创 java集合系列01--ArrayList
以下几篇文章都是对java集合的一个介绍,这些文章并非都是我的原创,主要是集合了各种途径获取的一个总结。对于集合,我们主要从以下四点关注: 1.是否允许为空; 2.是否允许重复数据; 3.是否有序,有序是指读取顺序与存放顺序是否一致; 4.是否线程安全。ArrayList(1)ArrayList 是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量
2017-07-02 16:38:31
281
转载 MySQL存储过程和函数的区别与优缺点
为什么要使用存储过程和函数 数据库对象存储过程和函数,是用来实现一组关于表操作的SQL语句代码当做一个整体来执行。一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面的SQL语句来执行结果有选择的执行后面的SQL语句。存储过程和函数可以简单的理解为一条或多条SQL语句的集合。存储过程和函数就是事先经过编译并存储在数据库中的一段SQL语句集合。存储过程和函数执行不是由程序调用,也不是手动启动
2017-07-02 11:17:30
5462
原创 java集合---视图与包装器
视图—-通过使用视图可以获得其他实现了Collection与Map接口的对象。映射类的keySet就是这样一个实例。初看起来,好像这个方法创建了一个新集,并将映射中的所有键都填进去,然后返回这个集。但是,事实并非如此。取而代之的是:keySet方法返回一个实现了Set接口的类对象,这个类的方法对原映射进行操作。这种集合就是视图。轻量级集合包装器Arrays类的静态方法asList将返回一个包装了普通
2017-07-01 16:00:56
1290
转载 java泛型中的通配符?问题
本文是经过网上查找的资料整合而来,给自己做个笔记,也分享给大家!需要你对泛型有一定的基础了解。package Test8_8;import java.util.ArrayList;import java.util.List;class Animal { private String name; public Animal(String name) { this.na
2017-06-20 17:21:02
231
原创 MySQL数据库中的存储引擎
与其他数据库软件不同,MySQL数据库提供了一种名为存储引擎的概念。存储引擎是MySQL数据库管理系统的一个重要特征,在具体开发中,为了提高MySQL数据库管理系统的使用效率和灵活性,可以根据实际情况来选择存储引擎。简单的说数据库是用一张张表来存储信息的,那么必然就会存在有的表简单,有的表复杂,有的表读取速度比较快但插入数据比较慢。因为在存储引擎指定了表的类型,即如何存储和索引数据、是否支持事务等,
2017-06-18 19:16:42
597
转载 【解惑】领略Java内部类的“内部”
内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类)1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。 例如 (实际上,内部类是可以设置为p
2017-06-17 16:20:42
230
原创 java中内部类使用小结
内部类的声明与访问 内部类可以是static的也可以用其它四种访问修饰符(而外部类只能使用public和 default修饰)。内部类所能实现的功能外部类也同样可以全部实现,只是使用内部类可以使其更加简洁高效。 内部类是一个编译时概念,一旦编译成功就会变成两个完全不同的类,对于一个名为outer的外部类和一个名为inner的内部类。编译结束之后会出现outer.class和outer$
2017-06-16 11:27:22
368
原创 初识MySQL数据库
这里我们主要是从控制台开始学习mysql数据库连接数据库mysqld net start;//连接数据库mysql -u root -p //输入用户名为root密码为默认值没有show databases;//显示已有数据库create database user_sql;//创建自己的数据库use user_sql;//使用自己创建的数据库exit;//退出数据库连接,如果直接关
2017-06-15 17:08:04
367
原创 java中enum的用法总结
一、enum的语法与基本作用创建一个枚举类型需要使用关键字enum,隐含了所创建的类都是java.lang.Enum的子类。枚举类型的每一个值都被映射到protect enum(String name, int ordinal);的构造函数中,在这里枚举的每一个值都被转换成一个字符串,并且同时对应一个下标(从0开始的)。 在实际开发中往往需要处理一些“数据集”,这些数据集在程序中是相对稳定的,如一
2017-06-04 14:10:58
423
转载 hashCode与equals的联系与区别
一、equals方法的作用1、默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。没有覆盖equals方法代码
2017-06-02 11:07:51
237
原创 String类中的equals方法与Object类中equals方法的区别
今天在无意中发现一个小知识点,难度不大就是简单和大家分享一下。String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1.equals(str2));//trueSystem.out.println(str1.hashCode());//96354System.out.prin
2017-06-02 10:25:19
3723
1
原创 为什么要把Java字符串设计为不可变的
String是Java中一个不可变的类,所以它一旦被实例化就无法被修改。不可变类一旦被创建就不可以被修改。本文将从内存、同步和数据结构相关知识简单说明一下将String设计为不可变类的好处。(1)字符串池:字符串池是方法区中一部分特殊存储。当一个字符串被创建的时候,首先会去字符串池中查找,如果找到,直接返回对该字符串的引用。String str1 = "abcd";String str2 = "a
2017-05-25 09:58:45
325
转载 Java中堆和栈的分析
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后(例如在for循环中定义一个i控制次数当循环结束后i的内存就会被释放), java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。 堆内存用于存放由new创建
2017-05-22 11:40:33
165
原创 Java中堆和栈的分析
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后(例如在for循环中定义一个i控制次数当循环结束后i的内存就会被释放),java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
2017-05-22 11:14:56
246
转载 深入分析HashMap
HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。 通过 HashMap、Has
2017-05-20 11:42:30
171
原创 HashMap和HashTable的分析(ConurrentHashMap的衍生)
集合类是Java API的核心。同时HashMap和HashTable的比较是面试中常见的问题,是考验程序员能否正确使用集合类。HashMap是
2017-05-17 19:37:36
715
翻译 HTML与body标签的一些研究
一、写在前面的 最近一直构思着写篇关于html标签的文章,虽说之前处理过html标签,也解决过不少棘手的问题,但是对其理解还不是很透彻,很多原理都是自己推测的。 在网上查阅相关资料想整合一下相关的信息,发现深入探讨html,与body的文章很少,只有在蓝色理想看到一篇“一叶千鸟”的这篇“正确认识html与body”有点价值,其余都没有什么相关的好文章。 而这里,我要讲述的与上面的交集并不多,只
2017-05-14 19:48:40
1738
原创 Tomcat的简单配置
我们尝试将自己eclipse中创建的Web工程发布到网上一、创建Web工程 1.在自己的eclipse中创建Web工程步骤如下: 选择Web下的Dynamic Web Project 创建Project name的文件名;Dynamic web module version选择2.5 新建HTML文件 新建文件夹,命名为images 到这里一个简单的Web工程就创建成功了
2017-05-14 11:33:04
640
原创 js中闭包的作用域问题
<script type="text/javascript"> /* *在js中当进行函数调用,会为每个函数增加一个属性SCOPE,通过这 个属性来指向一块内存 *这块内存包含所有的上下文变量,当在某个函数中调用新函数之后,新函数依然会有一个作用域 *来执行原有函数的SCOPE和自己新增的SCOPE,这样就形成了一个链式结构,这就是js中的作用于链 *注
2017-05-09 17:40:06
461
原创 基于原型链的继承
//在使用原型链进行继承一定要注意下面问题 //问题1.不能再设定原型链之后,再重新为原型链赋值 //问题2.一定要在原型链之后才能添加或者赋值 //使用原型链继承时,缺陷一:无法在子类中调用父类的构造方法 //缺陷二:如果父类中有引用类型,此时这个引用添加到子类的原型中 //当第一个修改后第二个也会被修改 function Parent(){
2017-05-08 21:48:13
263
原创 js中的原型理解
以上是第一种状态:对应的js代码如下function Person() {}Person函数中有一个prototype的属性指向Person的原型对象,在原型对象中有一个construct的属性指向了Person函数,所以可以通过new Person() 来创建对象。 以上是第二种状态用过Person.prototype.name为原型设置值之后,这些属性和方法都是设置在Person的原型中的
2017-05-05 17:21:26
492
原创 UUID唯一标识生成器
使用该方法生成的ID可以确保是绝对的唯一ID,但是它获取的是一个32位的无序的序列,我们往往将其设置在数据库中做为主键,在调用数据库信息时不会去调用它,它只作为一个标识没有实际价值。import java.util.UUID;/** * 描述:唯一标识生成器(生成数据库表的主键id) */public class IDGenerator { /** * 获取
2017-05-05 12:24:22
1447
原创 MD5加密技术
这是一个简单的MD5加密的实现代码,做为初级码农不需要去理解其实现原理只要会用就行;一般我们将其写成工具类可以方便的调用。import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Util { // 全局数组 private final stati
2017-05-05 11:30:38
318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人