- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 System.identityHashCode()方法
/** * Returns the same hash code for the given object as * would be returned by the default method hashCode(), * whether or not the given object's class overrides * hashCode()....
2019-09-22 18:58:33 5695
原创 内存分配与回收策略
栈上分配 如果一个对象的作用域不会逃逸出方法之外,可以将其分配到栈上,随着栈帧的销毁而释放内存。逃逸分析 判断一个对象的作用域是否逃逸出方法,如果对象没有逃逸(即对象不能被方法体外的变量,对象所引用),可以进行标量替换。参数-XX:DoEscapeAnalysis启用逃逸分析。标量替换 允许将对象打散,将其成员变量拆散。参数-XX:+EliminateAllocations开启标量替换(...
2019-09-08 17:17:48 169
原创 垃圾收集器
新生代收集器Serial收集器 Serial收集器是最基本、发展历史最悠久的收集器,曾经(在JDK1.3.1之前)是虚拟机新生代收集的唯一选择。特点单线程只会使用一个CPU或一条收集线程去完成垃圾收集工作,并且在进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。(stop the world)简单高效(与其他收集器的单线程相比)对于限定的单个CPU环境来说,Serail收...
2019-09-08 01:13:16 169
原创 String类 intern()方法笔记
jdk8下的intern()方法public final class String { /**返回字符串对象的规范表示形式 * 字符串常量池初始为空,被String类私有地维护。 * 如果当intern方法调用时,池中早已经有了与方法中的String对象相等(equals)的字符串值,那么返回池中的字符串。 * 否则,这个String对象加入到池中,并且返回该String对象的引用 *...
2019-09-05 23:22:16 120
原创 Redis3.0---事务
简介 Redis通过MULTI、EXEC、WATCH等命令来实现事务功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。事务的实现 一个事务从开始到结束通常会经历以下三个阶段:1)事务开始。2)命令入队。3)事务执行。事...
2019-09-01 01:37:07 146
原创 Redis3.0--发布与订阅
简介 Redis的发布与订阅功能由PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。 通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者:每当有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息。 除了订阅频道之外,客户端还可以通过执行PSUBSCRIBE命令订阅一个或多个模式,从而成为这些模式的订阅者:每当有其他客户端...
2019-08-30 01:01:47 247 1
原创 Redis3.0---集群
简介 Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。节点 一个Redis集群通常由多个节点组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组件一个真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群。 连接各个节点的工作可以通过CLUSTER MEET命令来完成。CLU...
2019-08-28 19:43:22 305
原创 String传值问题
今天写了一个bug:在一个函数中对传进来的String类型参数进行修改,可输出的String值未修改。 类似的: public static void main(String[] args) { String str = "aa"; Test1 test = new Test1(); test.change(str); S...
2019-08-26 16:09:06 1224
原创 Spring----AOP
简介 面向切面编程Aspect-Oriented Programming(AOP),是将与业务无关,却被业务所共用的逻辑抽取出来,以便于降低模块之间的耦合度。 AOP把系统分为两个部分:核心关注点和横切关注点。业务代码就是核心关注点,而与业务代码不太相关的就是横切关注点。相关概念切面: 对横切关注点的抽象横切关注点: 对哪些方法进行拦截,拦截后的怎么处理,这些关注点称之为横切关注点。...
2019-08-20 00:47:52 87
原创 Spring的自动装配方式
Spring装配包括手动装配和自动装配,手动装配有基于xml装配、构造方法、setter方法等。 自动装配no:默认的方式不进行自动装配,通过显式设置ref属性来进行装配。byName: 通过参数名自动装配,装配和该bean的属性具有相同名字的bean。byType:通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器视图匹...
2019-08-16 00:49:27 151
原创 Spring Bean生命周期
实例化一个Bean按照Spring上下文对实例化的Bean进行配置,即依赖注入如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,传递的就是Spring配置文件中Bean的id值。如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory,setBeanFactory(BeanF...
2019-08-14 23:24:26 90
转载 Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback Logger
转载https://blog.csdn.net/a960151a/article/details/81975604
2019-08-14 17:40:32 11590
原创 Spring Bean作用域
Spring3中为Bean定义了五种作用域,分别为singlenton(单例)、prototype(原型)、request、session和global session,五种作用域说明如下:singleton:单例模式(多线程下不安全)singleton:单例模式,Spring Ioc容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象,该模式在多线程下是不...
2019-08-13 23:54:38 99
原创 Redis3.0-----Sentinel
简介 Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理 命令请求。启动并初始化Sentinel 启动一个Sentinel可以使用...
2019-08-12 17:24:20 322
原创 Idea----marketplace plugins are not loaded
1.Appearance&Behavior->System Settings->Updates->User secure connection 勾选去掉2.关windows 防火墙3.如果有代理的话,关掉代理服务。参考https://blog.csdn.net/qq_33565047/article/details/89393432https://blog.cs...
2019-08-11 15:05:11 6190 2
原创 Redis3.0--多机数据库复制
简介 在Redis中,用户可以通过执行SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器。被复制的服务器为主服务器,而对主服务器进行复制的服务器被称为从服务器。 进行复制中的主从服务器双方的数据库将保存相同的数据,这种现象称作“数据库状态一致”,或者简称“一致”。旧版复制功能的实现 Redis的复制功能分为同步和命令传播两个操作:同步操作作用将从服务器的数据...
2019-08-10 19:09:11 126
原创 Redis3.0--AOF持久化
简介 与RDB持久化通过保存数据库中的的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写明令来记录数据库状态的, 被写入AOF文件的所有命令都是以Redis的命令请求协议格式保存。服务器在启动时,可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态。AOF持久化的实现 AOF持久化功能的实现分为命令追加、文件写入、文件同步三个步骤。命令追...
2019-08-07 20:04:44 181
原创 Redis3.0--RDB持久化
简介 因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,如果不想办法将存储在内存中的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。 为了解决这个问题,Redis提供了RDB持久化功能,这个功能可以将Redis在内存中数据库保存到磁盘里面,避免数据意外丢失。 RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点...
2019-08-05 22:31:01 248
原创 Redis3.0--数据库
实现 Redis服务器将所有数据库都保存在服务器状态的redisServer结构中的db数组中,db数组的每个项都是一个redisDb结构,每个redisDb结构代表一个数据库:struct redisServer { // 一个数组,保存着服务器中的所有数据库 redisDb *db;} 在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多少个数据库...
2019-08-04 17:23:18 165
原创 redis3.0---数据结构---对象
简介 Redis基于简单动态字符串、双端链表、字典、压缩列表、整数集合等数据结构构建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象。 通过这五种不同类型的对象,Redis可以在执行命令之前,根据对象的类型判断一个对象是否可以执行给定的命令。使用对象的另一个好处是,我们可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同...
2019-08-02 17:41:59 150
原创 redis3.0---数据结构---压缩列表
简介压缩列表(ziplist)是列表键和哈希键的底层实现之一。实现压缩列表是Redis为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。压缩列表节点的构成每个压缩列表节点可以保存一个字节数组或者一个整数值。每个压缩列表节点都有previous_entry_length、encodi...
2019-08-01 16:12:17 126
原创 redis3.0---数据结构---整数集合
简介整数集合是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层实现。实现整数集合(intset)时Redis用于保存整数值的集合抽象数据结构,它可以保存类型为int16_t、int32_t 或者int64_t的整数值,并且保证集合中不会出现重复元素。每个intest 结构表示一个整数集合:typedef struc...
2019-08-01 11:15:08 129
原创 redis3.0---数据结构---跳跃表
简介跳跃表是一种有序数据结构,它通过在每个节点中维持多个指向其他节点指针,从而达到快速访问节点目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点。实现跳跃表节点//跳跃表节点typedef struct zskiplistNode { // 成员对象 robj *obj; // 分值 double score;...
2019-07-31 20:58:09 97
原创 redis3.0---数据结构---字典
简介字典,又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构。因为C语言没有内置这种数据结构,因此Redis构建了自己的字典实现。实现哈希表typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 ...
2019-07-31 18:13:46 140
原创 redis3.0---数据结构---链表
实现链表节点typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; 节点的值 void *value;} listNode;链表typedef struct list { //表头节点 listNode *head;...
2019-07-30 11:08:55 86
转载 枚举类不建议有setter方法
转载自:https://blog.csdn.net/wzbwzh/article/details/80837570
2019-07-29 21:57:59 1916
原创 redis3.0---数据结构---sds(简单动态字符串)
简介redis中使用简单动态字符串(sample dynamic string — SDS)来作为默认的字符串表示。结构struct sdshdr { unsigned int len; //buf数组已使用的字节数量,不包含空字符 unsigned int free; //buf数组中未使用的字节数量 char buf[]; //字节数组};...
2019-07-29 19:13:08 117
转载 Intellij IDEA运行报Command line is too long解法
转载自:https://blog.csdn.net/gzl0524/article/details/81709323解法:修改项目下 .idea\workspace.xml,找到标签<component name="PropertiesComponent"> ,在标签里加一行<property name="dynamic.classpath" value="true" ...
2019-07-26 11:49:53 110
转载 只要重写 equals,就必须重写 hashCode。
因为hashcode()规定两个对象相等,hashcode一定相等。两个对象不等,hashcode不一定不等hashcode相等,两个对象不一定相等hashcode不等,两个对象一定不等如果重写equals() 方法,两个对象相等将不会根据地址相等判断,而默认的hashcode()是将对象地址哈希。所以违反了第二条。参考https://www.cnblogs.com/haly...
2019-07-23 19:42:24 224
原创 所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。
问题:public class Test1 { public static void main(String[] args) { Integer t1 = 127; Integer t2 = 127; System.out.println(t1 == t2); // 输出true Integer t3 = 128; ...
2019-07-23 15:44:41 889
翻译 POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。
定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),RPC框架在反向解析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。...
2019-07-23 10:41:58 1427
转载 SQL 语句:不得使用外键与级联,一切外键概念必须在应用层解决
阿里Java规范【强制】不得使用外键与级联,一切外键概念必须在应用层解决。说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险...
2019-07-22 18:10:50 4527 3
原创 JVM垃圾回收
JVM 垃圾回收如何确定垃圾引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能在被使用的。优点:实现简单,判定效率也很高。缺点:很难解决对象之间相互引用的问题。所以,没有被主流的Java虚拟机所采用。可达性分析算法通过一系列的称为“GC Roots”的对象作为起始点,从这些根节点开始向下搜...
2019-05-02 11:06:22 81
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人