自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Paranoid

要像一张邮票,坚持一件事情直到你到达目的地。

  • 博客(82)
  • 问答 (4)
  • 收藏
  • 关注

原创 Java并发--synchronized实现原理及锁优化

注:本文中的部分内容摘抄自他人博客,如有侵权,请联系我,侵删~本篇博客主要讲述 synchronized 关键字的实现原理以及 JDK 1.6 后对 synchronized 的种种优化。synchronized 的使用不再赘述。博主目前依旧存在的疑惑请在阅读完此篇博客之后,帮助博主回答这三个问题:多线程争夺 Monitor 的具体过程是怎样的?是根据 ObjectMonit...

2018-04-27 11:38:27 4335 2

原创 Java源码--JDK 1.8 HashMap 重点源码部分剖析

注:感谢 美团点评技术团队 的分享~~,博客部分内容摘抄自其中。侵删!今天我们来探究一下 HashMap 的内部实现机制。 明确 JDK 1.8 中的 HashMap 使用数组 + 链表 + 红黑树的结构进行实现。HashMap 的底层思想主要是哈希表,我们来看看 Java 的设计者们是怎么使用数组 + 链表 + 红黑树设计出 HashMap 的。HashMap的基本...

2018-04-20 21:55:40 882

原创 JVM--从volatile深入理解Java内存模型

在上一篇博客JVM–解析Java内存区域及数据的内存分配与线程安全之间的一些联系中也说到了,想要理解volatile关键字,我们需要掌握Java虚拟机运行时数据区的相关知识,但是这还不够,只有理解了Java的内存模型,我们才能开始讲述volatile,而Java虚拟机运行时数据区是掌握Java内存模型的基础,所以如果你还没有看上一篇博客,请点击上方链接~~~引言既然本节讲述volatile关键字,那

2017-08-16 09:39:38 1679 5

原创 排序--堆排序分析与实现

何为堆一个数组序列我们可以将其用完全二叉树或近似完全二叉树(不是满二叉树的完全二叉树)表示出来,当数组下标为i时,它的父节点为(i-1)/2,左孩子为(2i+1),右孩子为(2i+2),这种对应关系说明数组下标为0的地方也要存储数据。(关系完全二叉树和满二叉树我在这里不做介绍)堆是在完全二叉树的基础上递归定义的,堆分为大顶堆和小顶堆。 大顶堆:根节点的数值大于孩子节点,完全二叉树的左右子树同时满

2017-07-27 20:25:04 627

原创 MySQL--事务持久化原理探究

InnoDB 引擎独有的日志模块,redo log 通常是物理日志,记录的是数据页的物理修改。

2023-06-02 19:54:55 1011

原创 MySQL--万文长字探究隔离性实现原理

事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。这篇文章旨在讲清楚隔离性的产生背景、有何作用及实现原理等。

2023-05-31 15:19:19 1057

原创 Redis--简述RDB与AOF持久化

0 引言本篇博客是对“黄健宏先生-《Redis设计与实现》”一书中第二部分内容的梳理与总结,如果想要了解更多更详尽的内容,还请大家翻阅此书。1 RDB持久化RDB 持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个 RDB 文件中。数据库状态:我们将服务器中的非空数据库及它们的键值对统称为数据库状态。RDB 持久化功能所生成的 RDB 文件是一个经过压缩的二进制文件,通过该文件可以还原生成 RDB 文件时的数据库状态。1.1 RDB文件的创

2021-07-05 23:29:04 239

原创 Redis--数据存储设计与实现

移步掘金:Redis–数据存储设计与实现0 引言本篇博客是对“黄健宏先生-《Redis设计与实现》”一书中第一章内容的梳理与总结,如果想要了解更多更详尽的内容,还请大家翻阅此书。1 思维导图2 一切皆对象Redis 使用键值对的格式存储数据,并且键和值都以对象(Redis Object)来表示。所有的键对象都是字符串对象,而值对象则分为思维导图中的 5 种。3 字符串对象字符串对象是指数据库键所对应的值是字符串对象(即用来存储字符串)。Redis 共有 3 种字符串对象的实现方式。3.1

2021-06-28 23:14:09 1132 1

原创 Geek--博客已迁

新博客地址:H.Y’s BLOG。CSDN有可能弃用,最后欢迎大家访问我的小站~

2018-12-08 18:41:56 573 3

原创 JVM--再谈继承与多态

此文试图从JVM层面深刻剖析Java中的继承与多态,知识面覆盖class字节码文件,对象的内存布局,JVM的内存区域、分派,方法表等相关知识,内容整合于大量博客,知乎,书籍,并加上博主自己的理解,相信看完会对你大有裨益!即使博主在JVM专栏已经有两篇博客对多态的实现机制进行了分析,但是今天在分析了一波继承的原理之后,发觉之前对于多态的讲述还不完整,在查阅的相关资料之后,决定在这一篇博客真正的将...

2018-01-10 16:14:59 1160 2

原创 JVM--解析运行期优化与JIT编译器

JVM开发团队一直在努力,缩小Java与C/C++语言在运行效率上的差距。本篇博客,我们来谈一谈JVM(HotSpot)为了提高Java程序的运行效率,都实现了哪些激动人心的技术~

2017-12-28 10:09:34 1183 1

原创 JVM--浅谈垃圾收集机制

谈起GC,应该是让Java程序员最激动的一项技术,我相信每个Java程序员都有探究GC本质的冲动!本篇博客围绕三个问题展开: 1.哪些内存需要回收? 2.什么时候回收? 3.如何回收?哪些内存需要回收首先回答第一个问题:不再使用的对象需要进行回收,不使用的类也有可能回收。那么我们如何判断一个对象不再使用呢?主要有以下两种方法。引用计数算法...

2017-12-20 20:26:28 1073 3

原创 JVM--剖析类与对象在JVM中从生存至死亡

前面学习了Class文件结构、类的加载机制、字节码执行引擎、对象的创建与销毁,所以我准备从一个Java代码进行切入,详细剖析它的生命历程,将所学的知识真正的用起来,也算是对前面所学的知识进行一个系统的总结。我们以这份Java代码为例,来剖析一个Java程序的生命历程:interface ClassName { String getClassName();}class Company imp

2017-12-17 12:52:20 541

原创 JVM--详解创建对象与类加载的区别与联系

在前几篇博客中,我们探究了.class文件的本质,类的加载机制,JVM运行时的栈帧结构以及字节码执行时对应操作数栈以及局部变量表的变化。如果你已经掌握了这些东西,你现在应该会有一种感觉,给你一个Java代码,你可以从JVM的层面上将这个类从javac编译成.class文件开始,到使用java命令运行这个Class文件,然后这个类的运行过程是怎么样的,你可以解释清楚。但是等等,好像少了点什么...

2017-12-12 11:40:51 3049 2

原创 JVM--详解虚拟机字节码执行引擎之栈帧结构

本篇博客信息量依旧庞大!前言在讨论本文的主题之前,我们先来思考一下:什么是虚拟机字节码执行引擎?它有什么作用?在说明这个问题之前,我们先来想想之前我们已经学习过的class文件结构与类加载机制。当一个Java程序写好之后,我们使用javac命令对其进行编译,产生的虚拟机字节码存储在class文件中,我在JVM–解析Class类文件结构一文中详细分析了class文件中字节码的...

2017-12-08 23:55:35 1007

原创 JVM--详解类加载机制

这篇博客—干货很多!!!Java虚拟机的体系结构前面我们探讨了Class文件的结构,如果你还没有学习,将不利于这部分知识的吸收与掌握,所以请移步:JVM–Class类文件结构(一)学习一个东西之前,我们务必要知道,这东西大概是干什么的,有什么作用。为了更清楚的阐释类加载机制到底是干什么的,我先将JVM的结构图贴给大家:如上图,我们要学的类加载机制就是要搞清楚类加载器...

2017-12-01 15:56:09 2015 1

原创 Spring--《Spring实战》The temporary upload location [/tmp/uploads] is not valid

在看《Spring实战》第七章的时候,需要上传文件,书上说的是将上传的图片保存在/tmp/uploads这个目录下,因此我给项目的根路径下创建了/tmp/uploads这个目录,但是却出现了标题中的错误,经过一番斗争之后,明白了问题的所在。问题分析要解决这个问题,我们需要看一下Spring的源码:public class StandardMultipartHttpServletRequest ext

2017-11-14 08:52:43 4807

原创 Spring--《Spring实战》第6章ValidationMessages.properties使用问题

package spittr.model;import org.apache.commons.lang3.builder.EqualsBuilder;import org.apache.commons.lang3.builder.HashCodeBuilder;import javax.validation.constraints.NotNull;import javax.validation.

2017-11-10 10:49:02 7507

转载 Spring--关于《Spring实战》中第5章SpringMVC中表单验证无效问题

原文地址:关于SpringMVC中表单验证无效问题

2017-11-10 10:23:15 668

转载 Spring--SpringMVC中使用bean来接收form表单提交的参数时的注意点

原文地址:SpringMVC中使用bean来接收form表单提交的参数时的注意点

2017-11-08 23:33:46 2834

转载 IDEA--【Intellij Idea】Project Structure 讲解

原文地址:【intellij idea】Project Structure 讲解

2017-11-06 17:58:12 1379

原创 Spring--java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource问题解决

IDEA报错如下:Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp2.BasicDataSource at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1465)at org.apache.catali

2017-11-06 17:49:28 10529 3

原创 Web--Web缓存机制

什么是缓存Cache? 为什么人们要使用它?一个使用缓存Cache的站点会监听客户端向服务器端发出的请求,并保存服务器端的回应——比如HTML页面、图片等文件。接着,如果再次使用相同URL发送请求,他能够使用之前已经保存下来的反馈文件,而不是再次向服务器发出请求。有两个主要的理由让人们使用缓存: 减少延迟 — 因为所发出的网页请求是指向更接近客户端的缓存而不再是源服务器端,因此请求所花费时

2017-11-01 11:46:48 585

原创 JVM--Class类文件结构(二)

之所以将属性表拿出来单独进行讲解,就是因为在上一篇博客中我已经说过,在Class类文件中,最重要的当属常量池与属性表部分,而属性表中的属性目前已高达21项,当然我们不用全部记住它们,只需要熟悉其中的几个关键属性。属性表基本结构我们今天只谈其中的5种属性,如果你有兴趣,请下去自行了解~每个属性的名称都引用自常量池中一个CONSTANT_Utf8_info类型的常量来表示,属性...

2017-10-30 16:10:04 727

原创 C语言--一个实参与形参赋值引发的思考

首先来看一段代码:#include<stdio.h>void foo(const char **p) { }void main(int argc, char **argv) { foo(argv); return ;}我们对这段代码进行编译,发现它报出了警告:test.c: In function ‘main’:test.c:14:9: warning: passing arg

2017-10-27 00:24:51 1520 2

原创 JVM--Class类文件结构(一)

不知道大家有没有对.java文件进行编译之后生成的.class文件好奇过。我们都知道Java中的class文件是经过Java编译器对Java类文件进行编译后的产物。我想有不在少数的C程序员在学习Java之后在认知上会粗略的认为C程序在经过编译后产生的.out文件与.class文件在各方面大概相同,我刚开始也这样迷惑自己,但是随着学习的深入,我们必须搞清楚.class文件到底是个什么东西。那...

2017-10-20 23:50:16 2973 2

原创 Linux 新建用户、用户组以及为新用户分配权限

useradd命令useradd 选项 用户名 -d 目录,指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。 -g 用户组,指定用户所属的用户组。 -G 用户组,指定用户所属的附加组。 -s Shell文件,指定用户的登录Shell。 -u 用户号,指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。例1:# useradd –d

2017-10-20 11:46:02 25279

原创 Java网络爬虫(十三)--PhantomJs的使用及性能优化

先说点题外话吧,在我刚开始学习爬虫的时候,有一次一个学长给了我一个需求,让我把京东图书的相关信息抓取下来。恩,因为真的是刚开始学习爬虫,并且是用豆瓣练得手,抓取了大概500篇左右的影评吧,然后存放到了mysql中,当时觉得自己厉害的不行,于是轻松的接下了这个需求。。。然后信心满满的开始干活。。首先查看网页源代码。。。???我需要的东西源代码里面没有!!!然后去问了学长。学长给我说,这是AJAX

2017-10-10 22:29:57 10725 8

原创 Java网络爬虫(十二)--使用tcpdump和Wireshark进行网络抓包与分析

最近打算通过学校的某某系统抓取一下每个学生的个人信息,由于需要进行模拟登录,所以就要对登录页面进行post参数的提交。但是在进行网络抓包的过程中,使用chrome自带的网络抓包分析工具(也就是F12)发现每次在进行登录提交表格之后,chrome并不能将所需要提交的参数表单抓取下来。(评论区提供的依然使用chrome的方法也可以解决这个问题)问了学长原因,觉得是登录成功之后因为页面的跳转需要进行

2017-09-24 16:00:03 4266 4

原创 Java并发--单例模式DCL双检查锁机制中的volatile

作为被面试官最喜欢问到的23种设计模式之一,我们不得不熟练掌握单例模式以及洞悉多线程环境下,单例模式所存在的非线程安全问题以及它的解决方式。注:这篇文章主要讲述多线程环境下单例模式存在的非线程安全问题,并不详细讲述单例模式。

2017-08-29 14:14:58 1796 2

原创 Java网络爬虫(十一)--重构定时爬取以及IP代理池(多线程+Redis+代码优化)

一直觉得自己之前写的使用定时抓取构建IP代理池实在过于简陋,并且有一部分的代码写的并不合理,刚好最近又在学习多线程,就将之前的代码进行了重构,也方便对抓取代理ip有需求的人。之前自己写的那篇文章就不删除了,里面用到了MySQL以及循环调用ip的方法(一些东西也是值得了解的。取其精华,弃其糟粕吧),大家有兴趣的可以看一下(最主要的还是不舍得访问量,哈哈)。注:由于xici代理网的ip代理并不是很

2017-08-10 17:16:02 12364 7

原创 JVM--常量池与自动装箱、拆箱

最近一直在看《Java多线程编程核心技术》的第二章,主要讲的是线程共享变量与线程私有变量以及如何写出线程安全的代码。看这部分一开始没太注意,只是记住了一条规则,“类中的成员变量,也叫实例变量,也叫全局变量,它是非线程安全,是所有线程共享的变量,定义在方法中的私有变量是线程安全的,是每个线程私有的”。很好理解不是吗,然后一帆风顺的看到了关于volatile这部分的知识,看过之后我陷入了凌乱。。。关于...

2017-08-08 14:26:58 3431 15

原创 Java并发--详解this与Thread.currentThread()的区别

注:本系列博客参考《Java多线程编程核心技术》,主要是对书上的知识点进行总结,并记录学习过程。一直对并发这块比较感兴趣,也到了系统学习Java多线程的时间。目前所学习的书籍是《Java多线程编程核心技术》,买回来之后听说这本书不怎么样,豆瓣评分也就7点几,目前读完了第一章,感觉确实不是很好,但是也不算太坑,总的来说还是可以入手的。好了,废话不多说,开始正题。首先我们来看一份代码:...

2017-08-04 10:15:20 4062 5

原创 查找--二叉查找树分析与实现

为什么我们需要掌握这些“高端”的树型结构事实上,大型数据库的组织结构一般采用树型结构,我们必须要解决频繁更新数据的能力,要求支持高效的动态查找能力,包括记录的插入,删除,精确匹配查询,范围查询和最大值、最小值查询。但是由于数据库中包含了大量的记录,所以线性表的查询本身会因为记录太大而无法存储到主存之中,另外对于记录的插入和删除操作更需要移动大量的元素,这本身的效率是非常低下的。二叉...

2017-08-03 10:16:00 522

原创 排序--快速排序分析

快速排序实现代码:快速排序可以看到我的代码有一个错误版,我在这里给大家分析一下为什么会出现错误,并且将之记录以便今后进行查阅。快速排序(错误版分析)int Quick :: process(int array[], int l, int r) { int temp = array[l]; while(l != r) { while(array[r] >= temp) r

2017-07-22 00:20:16 476

原创 排序--归并排序

了解归并归并排序算法和快速排序算法是java.util.Arrays中使用的排序算法。对于一般的基本数据类型,Arrays.sort函数使用双轴快速排序算法,而对于对象类型使用归并排序(准确的说使用的是TimSort排序算法,它是归并排序的优化版本)。这样做的原因有两点,第一个原因,归并排序是稳定的,而快速排序不是稳定的。第二个原因,对于基本数据类型,排序的稳定性意义不大,但对于复合数据类型(...

2017-07-21 15:04:15 625 3

原创 Linux--记录使用Centos 7 的坑点

设定防火墙开放指定端口由于自己的腾讯云突然无法访问8080端口,在网上查阅了相关资料之后发现是防火墙的问题,因为Centos 7防火墙默认是不开放任何端口的,所以我们要对防火墙进行设置。Centos 7 不在使用以前的iptables,而是对防火墙进行了加强,现在使用的是firewalld,它的位置在/usr/lib/firewalld(系统配置)和/etc/firewalld(用户配置)都有相关设

2017-07-10 11:34:15 1020 2

原创 Java网络爬虫(十)--使用多线程提升爬虫性能的思路小结

在开始说正事之前我先给大家介绍一下这份代码的背景,以免大家有一种雾里看花的感觉。在本系列的前几篇博客中有一篇是用多线程进行百度图片的抓取,但是当时使用的多线程是非常粗略的,只是开了几个线程让抓取的速度提升了一些(其实提升了很多),初步的使用了一下线程,这篇博客将线程的使用进行了一些深入。项目背景博主这次的需求是抓取一些淘宝的数据,在此之前我们需要掌握基本的并行爬虫的相关知识。在这里

2017-06-14 15:04:26 11494 9

原创 Redis数据库--快速入门手册

注:本篇博客的所有测试环境均为Ubuntu16.04之下,本篇博客总结自Redis教程。数据库的安装与配置Ubuntu下安装 $sudo apt-get update $sudo apt-get install redis-server 服务端启动命令 redis-server客户端启动命令 redis-cli启动成功之后会出现: redis 127.0.0.1:

2017-06-07 20:32:02 918 1

原创 Java网络爬虫(九)--海量URL去重之布隆过滤器

简介布隆过滤器当我们要对海量URL进行抓取的时候,我们常常关心一件事,就是URL的去重问题,对已经抓取过的URL我们不需要在进行重新抓取。在进行URL去重的时候,我们的基本思路是将拿到的URL与已经抓取过的URL队列进行比对,看当前URL是否在此队列中,如果在已抓取过的队列中,则将此URL进行舍弃,如果没有在,则对此URL进行抓取。看到这,如果有哈希表基础的同学,很自然的就会想到那么如果用哈希...

2017-06-06 19:40:14 8032 9

空空如也

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

TA关注的人

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