自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CodingMayCry

挑我所爱,选我所长,取我所利,择世所需。

  • 博客(91)
  • 收藏
  • 关注

原创 Java创建对象的几种方式

今天总结一下,在Java中,创建对象可以有几种花样。① new 关键字这是最常用的方式了,这种方式是通过调用构造器来初始化对象及实例字段的。每个类的构造器皆会直接或间接调用父类的构造器,并且在同一个实例中初始化相应的字段。注意,调用构造器时,如果继承自父类,要显式用 super() 关键字或隐式用 this 关键字传入父类构造器的参数。② 反射机制这种方式也是通过反射方法,调用...

2019-06-21 18:55:28 4185

原创 看似简单并不简单的单例模式

引言今天无意间在公众号上看到一篇文章,文章中问到了一个问题,如何在不使用 synchronized 和 Lock 锁的情况下,实现单例模式?说实话,在此之前,只知道单例模式的两种实现模式,其他的压根见都没见过。今天算是开了眼界了,还是才学疏浅,路还很长啊!那就借此机会,趁热总结。常见的单例模式基于volatile的解决方案这种模式其实就是我们俗称的懒汉模式,也叫双重检查锁定。在多线...

2019-04-24 21:45:42 276

原创 从输入URL到按下回车的那一刻起

引言不论是面试还是考察综合知识的掌握,这个问题不愧是一个好问题。今天就完完整整的总结一下在地址栏输入URL的那一刻起,都发生了什么。1.输入地址当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能的URL了,它会从历史记录,书签等地方,找到已经输入的字符串可能对应的URL,然后给出智能提示,让你可以迅速补全URL地址。对于Google的chrome的浏览器,它甚至会直接...

2019-04-20 14:53:12 778

原创 Redis-HyperLogLog与BitMap

四两拨千斤——HyperLogLog因为在项目中,用到了这个高级数据结构来统计UV数据。所以,今天特来总结一下。日UV(Unique Visitor,独立访客),即统计同一个用户一天之内的访问请求,并且同一个用户的多次请求只能统计一次。这就要求每一个网页请求都需要带上用户ID,无论是登录用户还是未登录用户都需要一个唯一ID来标识。当然,第一个想到的是用set集合来存储,既能去重又能统计...

2019-09-07 16:47:38 1031

原创 七种方法让线程顺序执行

使用线程的 join() 方法 使用主线程的 join() 方法 使用线程的 wait() 方法 使用线程的线程池方法 使用线程的Condition(条件变量)方法 使用线程的CountDownLatch(倒计数)方法 使用线程的 CyclicBarrier (回环栅栏)方法...

2019-09-04 21:50:17 352

原创 Spring—BeanFactory和FactoryBean

BeanFactoryBeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所...

2019-09-03 10:01:22 335

原创 链表算法总结

通过做以上的Leetcode练习题目,得出以下比较通用的解题方法:快慢指针求链表中点ListNode slow = head;ListNode fast = head; while (fast.next != null && fast.next != null) { slow = slow.next; fast = fast.next.next;}/...

2019-09-02 17:01:54 382

原创 树的遍历总结

引今天在leetcode上刷完了常见的树的遍历的题,就来总结下规律。二叉树层次遍历该题目对应于 leetcode:102 二叉树的层次遍历https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/思路:既然是层次遍历,就选择使用BFS广度优先搜索来解决,BFS的核...

2019-08-31 21:37:28 283

转载 实现一个LRU缓存

什么是LRU算法?就是一种缓存淘汰策略。LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。LRU 算法实际上是让你设计数据结构:首先要接收一个 capacity 参数作为缓存的最大容量,然后实现两个 API,一个是 put(key, val) 方法存入键值对,另一...

2019-08-29 17:41:59 690 1

原创 项目:为什么要使用ThreadLocal?

为什么使用ThreadLocal?关于会话,一般是采用 cookie 和 session ,而 session 分布式部署时需要解决共享问题,一般就采用 DB 来替代它。现在我们用的是MySQL,将来会换成 Redis 。我们在会话里存的是用户的登录凭证,而不是用户信息本身。我们可以通过拦截器,在请求开始将凭证置换成用户信息。为了便于在本次请求的后续部分获取到登录用户,所以我通过 Thread...

2019-08-28 16:49:00 2113

原创 进程间通信的方式

管道模型先看一个命令:ps -ef | grep 关键字 | awk '{print $2}' | xargs kill -9这里面的竖线 " | "就是一个管道。它会将前一个命令的输出,作为后一个命令的输入。从管道的这个名称可以看出来,管道是一种单向传输数据的机制,它其实是一段缓存,里面的数据只能从一端写入,从另一端读出。如果想互相通信,我们需要创建两个管道才行。管道分为两...

2019-08-26 16:24:38 376

原创 @Autowired、@Resource 和 @Inject注解

@Autowired 自动装配1.默认优先按照类型去容器中找对应的组件:applicationContext.getBean(xxx.class),找到就赋值; 2.如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找。@Bean("apple02") //--------- Ⅰpublic Apple apple(){ ...

2019-08-19 10:21:39 175

原创 如何在Spring中编写自定义注解?

如何在Spring中编写自定义注解?@Target({METHOD,TYPE}) 表示这个注解可以作用的目标有哪些。 @Retention(RetentionPolicy.RUNTIME) 表示这是一个运行时注解,即运行起来之后,才获取注解中的相关信息,而不像基本注解如 @Override 那种不用运行,在编译时 IDEA 就可以进行相关工作的编译时注解。也可标记其他。 @Inherite...

2019-08-17 10:38:25 499

原创 Redis数据结构与对象

SDS:Simple Dynamic String 简单动态字符串1.与C字符串相比,获取字符串长度的复杂度为O(1)。 2.不会产生溢出问题。 3.空间预分配,如果对SDS修改之后,SDS的len小于1MB,则len和free相同。如果大于1MB,那么会分配1MB的未使用空间。 4.扩展SDS空间之前,SDS API会先检查未使用空间是否足够,如果足够API就会直接使用未使用空间,而无...

2019-08-16 11:17:16 186

原创 MyBatis-- # 与 $ 的区别

# 与 $ 的区别1.传入的参数在SQL中显示不同# 传入的参数在SQL中显示为字符串(当作字符串来处理),会对自动传入的数据加上双引号。栗子:SELECT user_id FROM teacher WHERE user_id = #{userId};假如当我们传入的参数ID为 ”123“ 时,上述SQL的解析为:SELECT user_id FROM teacher ...

2019-08-14 15:53:30 322

原创 @PostConstruct,@Autowired 和 Constructor的先后顺序

@PostConstructPostConstruct 注释用于在完成依赖项注入以执行任何初始化之后需要执行的方法。必须在类投入使用之前调用此方法。 所有支持依赖注入的类都必须支持此注释。即使类没有请求注入任何资源,也必须调用使用 PostConstruct 注释的方法。 只有一个方法可以使用此批注进行批注。 应用 PostConstruct 注释的方法必须满足以下所有条件:除了拦截...

2019-08-07 21:17:21 4992

原创 Spring5--@Indexed注解

引Spring Framework 5.0作为 Spring Boot 2.0 的底层核心框架,就目前已经发布的版本来看,相对于Spring Framework 4.x 而言,注解驱动的性能提升不是那么明显。然而随着Spring Framework 注解驱动能能力逐渐受到开发人员的关注,尤其在 Spring Boot 应用场景中,大量使用注解 @CompoentScan 扫描指定的 pac...

2019-08-02 17:05:01 7832

原创 HTTP相关总结

总结于《HTTP权威指南》URI:Uniform Resource Identifier,统一资源标识符 URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。URL:统一资源定位符,是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。大部分URL都遵循一种标准格式,这种格式包含三个部分:...

2019-08-02 09:25:32 162

原创 elasticsearch启动过程中被自动killed

问题今天在在Linux上安装Elasticsearch服务器的时候,配置好完成之后,启动es服务器,总是启动到一半就被killed掉,找了半天的问题,查看日志也没有错误。后来发现是内存不够了,由于ES是运行在JVM上,JVM本身除了分配的heap内存以外,还会用到一些堆外(off heap)内存。 在小内存的机器上跑ES,如果heap划分过多,累加上堆外内存后,总的JVM使用内存量可能超过物...

2019-08-01 14:34:14 4787

原创 Elasticsearch--入门

什么Elasticsearch?Elasticsearch 是一个开源分布式可扩展的近实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎,当然 Elasticsearch 并不仅仅时 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 (Near Real Time)...

2019-07-31 10:30:34 141

转载 什么是柯里化?

柯里化的概念在函数式编程(Functional Programming)相关的文章中,经常能看到柯里化 (Currying)这个名词。它是数学家柯里(Haskell Curry)提出的。柯里化,用一句话解释就是,把一个多参数的函数转化为单参数函数的方法。这是一个两个参数的普通函数:function plus(x, y){ return x + y}plus(1, ...

2019-07-29 20:01:34 15769 2

原创 SLF4J与日志框架的关系

日志模块日志模块作为一个通用的功能,在系统里通常会使用第三方的日志框架。Java 的日志框架有很多,比如:JUL(Java Util Logging)、Log4j、Logback、Log4j2,Tinylog等。除此之外,还有JCL(Apache Commons Logging)和 SLF4J 这样的“门面日志”。下面是 SLF4J 与日志框架 Logback、Log4j的关系图...

2019-07-29 19:18:22 334

原创 MyBatis--参数名

关于MyBatis参数名的解释:在mybatis的配置里,默认情况下,是启用自然参数名的,如下图:也就是说,你无需加@Param注解,它默认就按照参数名与表达式匹配。如果你加了@Param注解,那么就会覆盖掉这个参数名。在对参数名称处理的层面,mybatis有2种机制,如下图:1是自然参数名,2是自动生成的参数名。mybatis会按照参数的顺序,给每个参数生成一个名字,分别是p...

2019-07-25 15:03:21 1249

原创 如何避免ThreadLocal内存泄漏?

问题回答我们知道,ThreadLocal 是基于 ThreadLocalMap 实现的,这个 Map 的 Entry 继承了 WeakReference ,而 Entry 对象中的 key 使用了 WeakReference 封装,也就是说 Entry 中的 key 是一个弱引用类型,而弱引用类型只能存活在下次GC之前。如果线程调用 ThreadLocal 的 set 设置变量,当前 Th...

2019-07-21 09:28:02 1190

原创 Spring—事务的传播机制

什么是事务的传播机制Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播,即协调已经有事务标识的方法之间的发生调用时的事务上下文的规则(是否要有独立的事务隔离级别和锁)。今天在项目中要使用到Spring的事务,包括要设置事务的传播机制,因此就记录下传播机制的七种级别。public ...

2019-07-12 14:53:20 177

原创 转发和重定向的区别

转发重定向和转发有一个重要的不同:当使用转发时,SpringMVC容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。重定向与之相反,重定向方式的含义是第一个页面通知浏览器发送一个新的页面请求。因为,当你使用重定向时,浏览器中所显示的URL会变成新页面的URL, 而当使用转发时,该URL会保持不变。重定向的速度比转发慢,因为浏览器还得发出一...

2019-07-05 15:05:16 426

原创 Minor GC、Major GC和Full GC之间的区别

Minor GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。 内存池被填满的时候,其中的内容全部会被复制,指...

2019-07-01 16:18:28 209

原创 Java内存模型

为什么定义Java内存模型?现代计算机体系大部分是采用的对称多处理器的体系架构。每个处理器均有独立的寄存器组和缓存,多个处理器可同时执行同一进程中的不同线程,这里称为处理器的乱序执行。在Java中,不同的线程可能访问同一个共享或共享变量。如果任由编译器或处理器对这些访问进行优化的话,很有可能出现无法想象的问题,这里称为编译器的重排序。除了处理器的乱序执行、编译器的重排序,还有内存系统的重排序。...

2019-06-27 09:14:42 128

原创 JDK1.8之String.join()

记录今天在阅读 String 源码时,无意间看到了这个方法,以前也没有见过用过,那么就要好好研究一下。源码//返回一个新的String,该String由CharSequence元素的副本组成,这些元素与指定的副本连接在一起。Returns a new String composed of copies of the {@code CharSequence elements} joi...

2019-06-24 10:31:32 1131

原创 Java中的"goto"语句

记录今天和朋友聊天的时候,无意间聊到了 goto 语句,但是在 Java 中, goto 是保留关键字,但是朋友说 Java 中有和 goto 类似效果的语句,我竟然一点都不知道!顿时感觉 Java 白学了!心里万马奔腾!?立马回来查资料+写demo,还有这种操作???!!!哭了哭了。。。Java label众所周知,在Java中,for 循环的终止语句可以使用的有 break...

2019-06-22 20:49:30 10273

原创 Docker:TLS handshake timeout

记录Docker默认镜像拉取地址为国外仓库下载速度较慢,则会报错 "http: TLS handshake timeout" 。考虑到我朝网络环境,Docker官方也提供了国内的仓库,虽说下载速度慢点,但也不至于Time Out。这样,我们可以通过修改docker的源来加快速度,来避免Time Out。使用yum安装安装必要的系统工具sudo yum install -y y...

2019-06-22 13:42:59 6600

原创 由两个栈组成的队列

题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。思路:1.新建俩个普通栈,一个栈仅仅压入元素,记为 stackPush ,一个栈仅仅弹出元素,记为 stackPop 。2.当一组元素输入时,将该组数据依次压入stackPush 中,再从压入栈全部取出,依次压入stackPop 中。3.最后,从stackPop 中依次弹出,就符合了...

2019-06-04 21:51:23 413

原创 Comparable和Comparator比较器

引子首先,理解什么是比较器?说白了,就是用来比较两个元素的工具,这个工具在Java中很灵活,可以自定义比较规则,你可以想怎么比较就怎么比较。1都可以小于0,0也可以大于1。当然,这些都取决于业务场景。ComparableComparable,它是一个接口。这个接口中,仅仅只有一个方法,就是 compareTo() 方法。public interface Comparable&lt...

2019-05-27 14:45:43 201

原创 缓存穿透、雪崩、击穿

缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的。每次查询数据的时候,先判断缓存! 解决方案: 另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。缓存雪崩缓存雪崩是指在我们设置缓存时采用了相同的...

2019-05-24 17:13:55 230

原创 Linux性能优化——平均负载

当打开终端,输入 top 或 uptime 命令时,会出现以下结果:可以看出,uptime 是 top 的简略版。右上角的 load average 就是我们熟知的平均负载。什么是平均负载?正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。错误定义:单位时间内的cpu使用率。可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即 ps aux ...

2019-05-21 21:46:22 589

原创 数据库三大范式理解

一、第一范式1NF是对属性的原子性,要求属性具有原子性,不可再分解;表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是,同样,如果按照第一范式的标准,姓名也是可以分解成姓和名,即将姓、名分为两列。二、第二范式2NF是对记录的惟一性,要求记...

2019-05-20 14:47:54 837

原创 @ResponseBody注解

什么是@ResponseBody?@ResponseBody这个注解通常使用在控制层(controller)的方法上,其作用是将方法的返回值以特定的格式写入到 response 的 body 区域,进而将数据返回给客户端。当方法上面没有写 @ResponseBody ,底层会将方法的返回值封装为 ModelAndView 对象。加上该注解表示该方法的返回结果直接写到 HTTP的 respon...

2019-05-20 14:36:21 302

原创 fdfs-tracker、fdfs-storage、nginx启动

fdfs-tracker安装与启动fdfs-storage安装与启动nginx启动Centos7防火墙问题这个真的是天坑啊,找了老半天问题,就是无法从本机访问虚拟机上的nginx服务器,最关键是可以互相ping通!后来,才知道:原来在RHEL7开始,使用systemctl工具来管理服务程序,包括了service和chkconfig!#启动防火墙:system...

2019-05-19 10:50:06 2424

原创 zookeeper、dubbo、tomcat、redis启动

zookeeper#目录:cd /usr/local/TOOL/myZookeeper/zookeeper-3.4.11/bin#输入命令:./zkServer.sh start#查看启动状态:./zkServer.sh status#关闭zookeeper:./zkServer.sh stop#打开2181端口/sbin/iptables -I INPUT -p ...

2019-05-16 14:21:26 242

原创 Redis及缓存相关问题

1.在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果? 2.Redis 和 Memcached 有什么区别?Redis 的线程模型是什么? 3.为什么单线程的 Redis 比多线程的 Memcached 效率要高得多? 4.Redis 都有哪些数据类型?分别在哪些场景下使用比较合适? 5.Redis 的过期策略都有哪些?手写一下 LRU 代码实现? 6.如何保证 Redis 高...

2019-05-14 16:08:07 199

空空如也

空空如也

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

TA关注的人

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