自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AhahaGe

求知的乐趣

  • 博客(67)
  • 资源 (3)
  • 收藏
  • 关注

翻译 [译]关系型数据库是如何工作的

关系型数据库是如何工作的偶然之间读了Christophe写的How does a relational database work,感觉获益良多,所以在征得他本人书面同意之后,在此把这篇文章翻译成中文。英文水平和技术有限,有任何问题,欢迎指正。当我们说起关系型数据库,我不得不想有些东西丢失了。它们在任何地方都被使用。有很多种数据库,从小巧有用的SQLite到功能强大的Teradata。但是...

2018-05-04 16:44:27 630

原创 第四章 JVM 类加载机制

第四章 Java虚拟机类加载机制

2022-03-25 16:55:37 1697

原创 第三章 JVM 类结构

第三章 Java虚拟机类文件结构

2022-03-24 15:38:44 1377

原创 Java 应用程序时区问题

前端页面发现日期数据异常排查:1. 由于这个问题是开发另外一个功能的时候发现的,所以怀疑是环境原因 2. 看了下服务器的时间,date命令发现时间是对的 3. 但是查看日志文件,时间错误,比服务器时间晚 8 个小时 4. jinfo pid查看应用配置信息发现 user.timezone = UTC,然后根据这个配置去ctzs-time-zone-ids-that-can-be-specified-usertimezone-property 发现 UTC UCT 0 : 00 Coordinated.

2022-03-24 11:01:13 1138

原创 第二章 JVM 编译

Java 虚拟机编译1. javac 编译 和 javap 查看 class 文件2. 指令格式3. 如何学习和理解编译后字节码3.1 对象创建的例子3.1.1 Java 代码3.1.2 编译后的使用 javap 查看的字节码3.1.3 指令的执行3.1.3.1 第一条指令 new3.1.3.2 第二条指令 dup3.1.3.3 第三条指令 invokespecial3.1.3.4 第四条指令 astore_13.1.3.5 第五条指令 aload_13.2 循环控制的例子4. 关键知识点5. 代表性的 J

2022-03-23 09:41:33 569

原创 第一章 JVM 概述

The Java Virtual Machine Specification提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加第一章 Java虚拟机概述第二章 Java虚拟机类加载机制第三章 Java虚拟机运行时数据区域第四章 Java虚拟机栈帧第五章 Java虚拟机指令集提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录The Java Virtual Machine Specification1. Java 虚拟机的概述2. Java 虚拟机结构2.

2022-03-22 17:48:19 1545

原创 14. Starvation and Fairness

Table of Contents1. Causes of Starvation in Java1.1 Threads with high priority swallow all CPU time from threads with lower priority1.2 Threads are blocked indefinitely waiting to enter a synchronized block1.3 Threads waiting on an object (called wait() on

2020-11-25 10:27:14 127

原创 13. Deadlock Prevention

In some situations it is possible to prevent deadlocks. I’ll describe three techniques in this text:Table of Contents1. Lock Ordering2. Lock Timeout3. Deadlock Detection1. Lock OrderingDeadlock occurs when multiple threads need the same locks but obtain

2020-11-25 10:21:07 168

原创 12. Deadlock

Table of Contents1. Thread Deadlock2. More Complicated Deadlocks3. Database Deadlocks1. Thread DeadlockA deadlock is when two or more threads are blocked waiting to obtain locks that some of the other threads in the deadlock are holding. Deadlock can occ

2020-11-25 10:15:24 142

原创 11. Thread Signaling

Table of ContentsThe purpose of thread signaling is to enable threads to send signals to each other. Additionally, thread signaling enables threads to wait for signals from other threads. For instance, a thread B might wait for a signal from thread A indi

2020-11-25 10:11:29 167

原创 10. Java ThreadLocal

Tables of content1. Creating a ThreadLocal2. Accessing a ThreadLocal3. Generic ThreadLocal:泛型4. Initial ThreadLocal Value5. Full ThreadLocal Example6. InheritableThreadLocal7. set源代码解析8. Get the map associated with a ThreadLocal.9. Create the map associate

2020-11-25 10:00:57 60

原创 9. Java‘s Volatile Keyword

Java's Volatile KeywordJava volatile Guarantees Variable VisibilityThe Java volatile GuaranteeWhen is volatile Enough?Performance Considerations of volatileThe Java volatile keyword is used to mark a Java variable as “being stored in main memory”. More pr

2020-11-25 09:42:34 101

原创 8. Java同步块

**Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。**本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)Java中的同步块用synchronized标记。同步块在Java中是同步在某个对象上。所有同步在一个对象上的同步块在同时只能被一个线程进入并执行操作。所有其他等待进入该同步块的线程将

2020-11-25 09:39:01 106

原创 7. 线程安全及不可变性

**当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全。**如下示例:查看源代码打印帮助01 public class ImmutableValue{02 private int value = 0;03 04 public ImmutableValue(int value){05 this

2020-11-24 14:23:16 138

原创 6. 线程安全与共享资源

**允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。**当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量**局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。**下面是基础类型的局部变量的一个例子:1 public void someMethod(){2 3 long threadSafeInt = 0;4 5 threadSafeInt++

2020-11-24 14:20:54 146

原创 5. 竞态条件与临界区

在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。多线程同时执行下面的代码可能会出错:查看源代码打印帮助1 public class Counter {2 protected long count = 0;3 public void add(lo

2020-11-24 14:16:13 124

原创 4. 如何创建并运行java线程

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:1 Tread thread = new Thread();执行该线程可以调用该线程的start()方法:1 thread.start();在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了。**编写线程运行时执行的代码有两种方式:一种是创建Thread子类的一个实例并重写run方法,第二种是创建类的时候实现Runnable接口。**

2020-11-24 14:12:42 82

原创 3. 多线程的代价

从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如果存在疑问,应该尝试测量一下应用程序的性能和响应能力,而不只是猜测。设计更复杂虽然有一些多线程应用程序比单线程的应用程序要简单,但其他的一般都更复杂。在多线程访问共享数据的时候,这部分代码需要特别的注意。线程之间的交互往往非常复杂。不正确的线程同步产生的错误非常难以被发现,并且重现以修复。上下文切换的开销当CPU从执行

2020-11-24 14:08:48 84

原创 2. 多线程的优点

尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好:主要是更充分利用cpu资源程序设计在某些情况下更简单程序响应更快:以服务器应用为例资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文件需要2秒。处理两个文件则需要:1 5秒读取文件A2 2秒处理文件A3 5秒读取文件B4 2秒处理文件B5 ---------------------6 总共需要14秒从磁盘中读取文件的时候,大部分

2020-11-24 14:06:46 144

原创 1. Java并发性和多线程介绍

在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机资源。一个好的程序榜样是在其不再使用这些资源时对其进行释放,以使得其他程序能有机会使用这些资源。再后来发展到多线程技术,使得在一

2020-11-24 14:03:40 127

原创 K神吹水系列之RPC

我们知道,有几十种的RPC技术,corba啊,com+,soap啊,xml-rpc,rmi、.net remoting,hessian,pb,thrift,avro,,,甚至dwr,blazeds远程过程调用,肯定走网络的,所以可以按协议分成走tcp的,走http的,少量的是走http的,比如hessian,soap一般也走http大部分直接走tcp对了,soap可以走非http方式的哦,一般人不知道。以前的axis和cxf源码里会带有webservice走jms协议的例子。远程调用,肯定是两个系

2020-11-24 13:33:05 178

原创 学习方法和自我管理杂记

学习方法和自我管理杂记1. 两种学习方法:2. 马拉松式学习与技术人员的成长性:3. 进阶之路4. 从拖延到高效,我推荐这 7 本书7. how to read source code8. 技术的正宗与野路子9. 如何让自己成为一个优秀的程序员10. 从腾讯的职级系统 看清自己的职场宿命11. 中国式管理_最适合我们中国人自己的管理方式!12. 学习top100站点1. 两种学习方法:昨天听一个讲座,挺有意思,怎么学习一个东西,有两种办法:一个是像学习母语一样,天天刺激你一点点的学习具体内容;一个是像学

2020-11-24 11:24:42 1927 2

原创 《一生的资本》随想

财富成功障碍之一——得过且过世界上没有一件伟大事业是只想“填饱肚子”的人或者“得过且过”的人干成的。做成这些大事业的,都是那些意志坚定、心怀抱负、不畏艰苦、充满热忱的人。豪勒斯·格里利先生说,如果想把事情做得完美,就非得有深邃的眼光和十分的热忱不可。一个生气勃勃、目标明确、深谋远虑的人,一定会接受任何艰难困苦的挑战,会集中心力向前迈进。他们从来不认为生活应该“得过且过”,所以,他们的生活每天都是新鲜的,他们每天都在按计划进步,他们知道,一定得向前,不管是进了一尺还是一寸,最重要的是每天都在进步。有些年

2020-11-24 10:53:16 291

原创 TCP、UDP、TCP_IP

1. TCP协议TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包

2020-11-23 18:25:39 274

原创 Mysql(分页+TOOMANY+索引+DBCP配置+字符集)

MysqlToo many connectionsMysql数据库分页Clustered index vs Secondary-index正确配置DBCP防止数据库重启引起的访问错误Mysql字符集Too many connectionsSELECT GROUP_CONCAT(CONCAT('kill ',id) SEPARATOR '; ') AS cmd FROM information_schema.processlistWHERE USER=‘root’AND command=‘Sleep

2020-11-23 18:12:23 72

原创 代码质量(单元测试+代码审查)

代码质量1. 单元测试2. 代码审查1. 单元测试单元测试的目的:尽早在尽量小的范围内暴露错误错误率恒定定律,一定量的代码,必然会产生一定量的BUGa) 刚写完一个方法就发现BUG,修改只要几分钟;方法提供给其他人使用后,再发现BUG,加上双方修改,review,再联调,预计耗时可能需要半天。b) 提交测试之后,由测试发现,需要定位原因提交BUG,双方修改BUG,review再联调,再打包测试,然后重新测试.可能需要耗费一整天c) 而发布到线上之后再发现问题,就不只是耗费时间成本的问题,可能造成

2020-11-23 17:21:26 1699

原创 平时用的Git命令笔记

分布式,不必联网,分支管理1.git init 初始化一个repo2.git add把一个文件添加到repo,把一个文件修改添加到暂存区3.git commit把一个文件提交到repo -m “描述本次操作”,把暂存区的所有内容提交到单前分支4.git diff查看修改的内容5.git status查看工作区的状态6.git log显示由近到远的提交日志,以便回退到过去的某个版本 git log --pretty=oneline7.git reset --hard HEAD^ 回退到上一个版本

2020-11-23 16:54:32 173 1

原创 平时用的Maven命令笔记(install+deploy+dependency)

mavenmaven installmvn deploymaven 依赖maven installmvn install:install-file -DgroupId=com.hadoop.gplcompression -DartifactId=hadoop-lzo -Dversion=0.4.20 -Dpackaging=jar -Dfile=hadoop-lzo-0.4.20.jarmvn deploymvn deploy:deploy-file -DgroupId=com.hadoop.gpl

2020-11-23 16:30:38 344

原创 ElasticSearch(简介+存数据+ElasticDump)

ElasticSearch什么是ElasticSearch索引:文档:节点和集群分片副本ElasticSearch中存储数据文档索引ElasticDump什么是ElasticSearch开源搜索服务器项目索引:索引是ElasticSearch存放数据库的地方,可以理解为关系型数据库的一张表。文档:文档是ElasticSearch中存储的主要实体,可以理解为数据表中的一行数据。文档由字段(行数据的列)组成,多值字段允许一个字段出现多次,一个字段对应一种类型。字段类型可以是复合的,字段可以包含其它

2020-11-23 16:03:53 1045

原创 Storm(install + 送达保证)

http://storm.apache.org/wget https://github.com/downloads/nathanmarz/storm/storm-0.8.1.zipcd /home/storm/optunzip storm-0.8.1.zipcd /home/storm/opt/storm-0.8.1/conf/vi storm.yaml启动:bin/storm nimbus >/dev/null 2>&1 &bin/storm superviso

2020-11-23 15:53:40 101

原创 linux 常用命令(LOG+SCP+PORT+DEVICE)

linux常用命令1. LOG2. SCP3. 端口相关4. 查看系统硬件配置信息1. LOGtail -n 100 global.log | grep "taskid:1011" tail -n 100 catalina.out > task.logdocker logs -f --tail=1 containerId2. SCPscp source_file_path destination_file_pathscp ~/my_local_file.txt user@remote_

2020-11-23 15:32:33 263

原创 Log4j2 LMAX disruptor

LMAX disruptor exchanging data between concurrent threads the queuing of events between stages in the pipeline was dominating the costs.However it became evident that queues as a fundamental data structure are limited due to the conflation of design conce

2020-11-20 17:27:40 355

原创 Hash表(散列表)

Hash表(散列表)他能够很快速的定位到想要查找的记录,而不是与表中的存在的记录的关键字进行比较。它采用了函数映射的思想将记录保存到存储位置与记录的关键字关联起来。查询时间复杂度:链表 0(n)二叉排序树 0(logn)hash表 0(1)Hash表采用一个映射函数 f : key —> address 将关键字映射到该记录在表中的存储位置,从而在想要查找该记录时,可以直接根据关键字和映射关系计算出该记录在表中的存储位置,通常情况下,这种映射关系称作为Hash函数,而通过Hash函数和关键

2020-11-20 14:49:29 223

原创 清醒思考的艺术(双曲贴现)

双曲贴现:一个决定离现在越近,他的情感利息就越多. 及时行乐的想法控制的事实.

2020-11-20 14:03:58 247

原创 第一本docker书笔记

第一本docker书笔记,主要是前几章的原理,5,6,7章实践部分笔记没记录。笔记是从xmind中导出,看xmind格式会更方便,[免费资源地址](https://download.csdn.net/download/myxiaoribeng/12303033)

2020-04-04 21:06:09 256

原创 Redis设计与实现——第二部分 单机数据库的实现 第10章 rdb持久化

Redis数据库状态:服务器中的非空数据库以及它们的键值对统称为数据库状态。因为Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存总的数据库状态保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。Redis rdb持久化功能,可以把某个时间点上redis在内存中的数据库状态保存到磁盘里面一个RDB二进制文件中,避免数据意外丢失,red...

2019-06-21 13:01:11 118

原创 Redis设计与实现——第二部分 单机数据库的实现 第9章 数据库

服务器中的数据库Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个redisDb结构代表一个数据库。struct redisServer {//一个数组,保存着服务器中的所有数据库redisDb *db;//服务器的数据库数量 dbnum属性的值由服务器配置的databas...

2019-06-21 12:54:28 207

原创 Redis设计与实现——第一部分 数据结构与对象 第8章 对象

Reids并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象,每种对象至少一种数据结构。Redis根据对象的类型来判断对象是否可以执行给定的命令。使用对象可以针对不同的场景为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。Redis的对象系统还实现了基于引用...

2019-06-21 12:44:06 133

原创 Redis设计与实现——第一部分 数据结构与对象 第7章 压缩列表

应用场景:1.列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串。压缩列表时为了节约内存而开发的,是由一些列特殊编码的连续内存块组成的顺序性(sequential)数据结构。一个压缩列表可以包含任意多的节点(entry),每个节点可以保存一个字节数组或者一个整数值。压缩列表组成:压缩节点组成:previous_entr...

2019-06-21 12:18:50 95

原创 Redis设计与实现——第一部分 数据结构与对象 第6章 整数集合

使用场景:集合键的底层实现之一。整数集合的底层实现为数组,这个数组以有序、无重复的方式保存集合元素,在有需要时,程序会根据新添加元素的类型,改变这个数组的类型。升级操作作为整数集合带来了操作上的灵活性,并且尽可能地节约了内存。整数集合只支持升级操作,不支持降级操作。整数集合(intset)是Redis用于保存整数数值的集合抽象数据结构,他可以保存类型为int16_t、int32_t或者i...

2019-06-21 12:15:46 100

Http rfc protocol keynote

http协议英文笔记,详细记录http rfc的英文笔记,Http rfc protocol keynote 比看rfc这么厚的文档方便多了,比看rfc这么厚的文档方便多了 http协议英文笔记,详细记录http rfc的英文笔记,Http rfc protocol keynote

2020-11-23

第一本docker书笔记.xmind

第一本docker书学习笔记,缺少5.6.7章的详细笔记,不过这部分主要是实战,前几章是原理,记录的还是比较详细的,希望对大家学习docker有一些帮助。

2020-04-04

jdbc实例+注释 java语言描述

包括了Jdbc常用的开发知识。 并有详细的注释

2011-03-27

空空如也

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

TA关注的人

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