自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 Java对象头详解

Java对象头详解

2022-07-19 17:01:18 3784

原创 Mutex:4种易错场景大盘点

以下内容摘录整理自《极客时间》晁岳攀(鸟窝)的专栏——《Go 并发编程实战课》。常见的 4 种错误场景:Lock/Unlock 不是成对出现Copy 已使用的 Mutex(Mutex是值类型,传递的时候是复制)重入(Mutex不是可重入锁)死锁补充:死锁必要的4个条件(破坏其中一个就能避免死锁):互斥: 至少一个资源是被排他性独享的,其他线程必须处于等待状态,直到资源被释放。持有和等待:goroutine 持有一个资源,并且还在请求其它 goroutine持有的资源,也就是咱们

2020-10-26 10:43:21 241 1

原创 GO的Mutex——庖丁解牛看实现

摘录自极客时间专栏

2020-10-23 17:23:50 402

原创 Go的数组和切片

数组(array)类型和切片(slice)类型的主要区别:数组类型的值(以下简称数组)的长度是固定的,而切片类型的值(以下简称切片)是可变长的。数组的长度在声明它的时候就必须给定,并且之后不会再改变。可以说,数组的长度是其类型的一部分。比如,[1]string和[2]string就是两个不同的数组类型。而切片的类型字面量中只有元素的类型,而没有长度。切片的长度可以自动地随着其中元素数量的增长而增长,但不会随着元素数量的减少而减小。我们其实可以把切片看做是对数组的一层简单的封装,因为在每个切片的底层

2020-10-23 10:36:06 256

原创 Go变量浅析

Go 语言中的程序实体包括变量、常量、函数、结构体和接口。 变量声明:Go 语言的类型推断可以带来哪些好处?动态类型编程语言,如Python或Ruby,也有这种类型推断,可以让程序灵活性的明显提升。但在那些编程语言中,这种提升可以说是用程序的可维护性和运行效率换来的。而Go 语言是静态类型的,所以一旦在初始化变量时确定了它的类型,之后就不可能再改变。这就避免了在后面维护程序时的一些问题。另外,请记住,这种类型的确定是在编译期完成的,因此不会对程序的运行效率产生任何影响。如果只用一

2020-10-22 15:11:51 127

原创 go语言的helloWorld

Go语言诞生背景:多核硬件架构超大规模的分布式计算集群WEB模式导致的产品快速迭代首先诞生于2007年的谷歌。

2020-10-22 11:20:58 159 1

原创 计算机网络中的安全(一)

什么是网络安全安全通信具有下列所需要的特性:机密性。仅有发送方和希望的接收方能够理解传输报文的内容。因为窃听者可以截获报文,这必须要求报文在一定程度上进行加密,是截取的报文无法被截获者所理解。报文完整性。发送方和希望的接收方希望确保其通信的内容在传输过程中未被改变——或者恶意篡改或者意外活动。端点鉴别。发送方和接收方都应该能证实通信过程所涉及的另一方,以确信通信的另一方确实具有其所生成的...

2019-08-04 22:07:37 432

原创 计算机网络第六章(二)

链路层寻址和ARP地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络...

2019-08-03 17:39:40 365

原创 计算机网络第六章(一)

链路层概述链路层上面是网络层,负责网络中的终端和终端的通信,下面是物理层,负责提供物理链路节点间的比特流的传输沿着通信路径连接相邻节点的通信信道称为链路(link)。为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的每段链路传输。在通过特定的链路时,传输节点将此数据报封装在链路层的帧中,并将该帧发送到链路上;接受节点然后接收该帧并提取出数据报。虽然网络层的任务是将运输层报...

2019-08-03 16:31:26 280

转载 计算机网络第四章

网络层的作用:实现主机到主机的通信服务,将分组从一台发送主机移动到一台接收主机。网络层重要的两大概念:转发和路由选择1、转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。2、路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。计算这些路径的算法称为路由选择算法。每台路由器都有一张转发表,路由器通过检查到达分组首部字段的值来转发分组...

2019-06-30 18:41:51 629

转载 计算机网络自顶向下 第三章(二)

TCP协议TCP连接约定TCP在端系统上运行和保存状态,而不是在中间的网络元素如路由器和链路层交换机运行,所以它们不会维持TCP的连接状态。它们只能看到数据报而不是连接。TCP提供全双工服务,点对点连接,但是不支持广播。TCP连接的建立过程通常是由一端打开一个套接字(socket)然后监听来自另一方的连接,这就是通常所指的被动打开(passive open)。服务器端被被动打开以后,用户...

2019-06-30 18:36:52 225

原创 计算机网络第三章

传输层解决的问题传输层解决的问题是,数据传输的问题。数据传输分为不可靠传输和可靠数据传输,分别对应的是UDP协议和TCP协议。运输层和网络层的关系运输层协议是在端系统中,只在端系统中发生作用,而不是在路由器中实现的。网络层提供了主机之间的逻辑通信,而运输层为运行在不同主机上的进程之间提供逻辑通信。在发送端,传输层将从发送应用程序接收到的报文(应用层报文)转换成报文段,随后将这些报文段传递...

2019-06-10 09:20:15 269

原创 Hibernate持久态对象--自动更新数据库引发的bug

Hibernate分为三种基本的状态:持久态、自由态(临时状态)、游离态。1. 持久态:与session关联并且和在数据库有数据,已经持久化了并且在数据库的缓存当中了。2. 自由态:就是直接new出来的对象,既没有持久化到数据库中去,也没有在session当中。3. 游离态:在Session中没有了,但是已经持久化到了数据库当中。上图中的record的对象是通过SELECT语句查询出来的...

2019-06-10 09:03:07 1051

转载 计算机网络第二章

应用程序体系结构:由应用程序开发者设计,规定了如何在各种端系统上组织该应用程序。如:C/S体系结构,P2P体系结构。流量密集型应用都是用P2P体系结构的。比如:文件共享(BitTorrent)、对等方协助下载加速器(迅雷)、因特网电话视频会议(Skype)。许多应用都是C/S和P2P混合的形式,比如:对于许多即时讯息应用而言,服务器被用于跟踪用户的IP地址,但是用户到用户的报文在用户主机...

2019-05-26 19:10:34 672

转载 计算机网络第一章

局域网私有的,局域网中每台主机都具有一个标识地址来定义自身,而互相发送的数据包都需要携带源主机和目的主机的标识地址。在过去,所有主机都连在一条公共电缆,需要接收的机器保存线上的包,不需要的则丢弃。而现在多数局域网采用智能连接交换机,可以识别数据包中地址然后引导该报到其目的地址,减轻了局域网中的流量广域网广域网对比局域网通常覆盖范围会更大,可以覆盖一个城市/一个省/一个国家/甚至真个世界。...

2019-05-26 19:05:39 158

原创 监控设计--监控信息添入excel附件,进行邮件通知

业务背景一个虚拟货币系统,需要日常监控,例如每日的新增流量统计、交易流水统计、异常交易统计等。每日统计一次以上信息,并将统计信息添加到excel表中,以邮件的形式进行发送。业务需求1.可以在监控使用者无感知的情况下,添加新的监控任务2.监控信息以excel文件形式告知管理者监控设计1.首先看监控使用者(定时任务)如何触发所有的监控:2.monitorExecutor的代码/**...

2019-04-19 15:05:40 274

原创 测试

01

2019-03-21 14:22:26 99

原创 敏捷开发--第一周

一、敏捷实践人与人中间的交互是复杂的、并且其效果从来都是难以预期,确是工作中最为重要的方面。过程和方法对项目的结果只有次要的影响。首要的影响是人。1、可以工作的软件胜过面面俱到的文档就算微信的官方开发文档,也会有忽略的细节。而对应我们自己来说,功能做出来后还会有一波修改意见,文档不能反映当前状况才是常态。所以,尽快给出可以体验的功能很重要。并且,我很怀疑,一些东西是否必须以文档的形式来说明?...

2019-03-03 19:01:23 150

原创 ##CSAPP读书日记-第十二章-并发编程

一、应用级并发的作用构造并发程序的方法:二、基于进程的并发编程构造并发程序最简单的方法就是用进程,使用像fork、exec和waitpid之类的函数。特点:父子进程之间共享文件表,但是不共享用户地址空间。优点:一个进程不会覆盖另一个进程的虚拟内存。缺点:进程共享状态信息变得困难,必须使用显式的IPC(进程间通信)机制。结果就是这种设计方式比较慢,因为进程控制和IPC的开销很高。...

2019-02-17 17:31:02 251

原创 ##CSAPP读书日记-第十一章-网络编程

一、The Client Server Model每个网络应用都是基于该模型的。采用这个模型,一个应用是由一个服务器进程和一或多个客户端进程组成。服务器管理某种资源,通过操作这种资源来为它的客户端提供某种服务。该模型中的基本操作是transaction,一个transaction组成:1)当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务transaction。2)服务器收到请求后...

2019-02-17 17:04:24 212

原创 ##CSAPP读书日记-第十章-系统级I/O

什么是系统级I/O?输入/输出(I/O)是在主存和外部设备之间复制数据的过程。Unix I/O中的关键抽象所有的I/O设备都被模型化为文件,而所有的输入和输出都被当作对相应文件的读和写来执行.这种将设备优雅地映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口,成为Unix I/O,这使得所有的输入和输出都能以一种统一且一致的方式来执行:打开文件。内核记录有关这个打开文件...

2019-01-21 10:49:58 203

原创 ##CSAPP读书日记-第九章-虚拟内存

虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据。它为每个进程提供了结构一致的地址空间,从而简化了内存管理。它保护了每个进程的地址空间不被其它进程破坏。物理和虚拟寻址:计算机系统的主存被组织成一个由M...

2019-01-13 20:07:32 237

原创 ## CSAPP读书日记-第八章-异常控制流-第二周

程序和进程的区别:再明确下进程的经典定义:进程是一个执行中程序的实例。理解上面的,有助于理解fork和execve函数fork函数是创建出一个新的子进程然后在子进程中跑相同的程序.两个程序对应两个PID(进程id)execve函数是在当前进程的上下文中加载运行一个新的程序, 直接覆盖掉当前进程的地址空间, 并没有创建出新的进程. 新旧程序的PID是一样的.补充:进程是如何并发执行的?...

2018-12-30 18:38:05 120

原创 ## CSAPP读书日记-第八章-异常控制流-第一周

异常控制流,简称:ECF(Exceptional Control Flow)需要理解ECF的原因:异常是ECF的一种形式,它一部分由硬件实现,一部分由操作系统实现。如图:硬件实现的部分是CPU发现控制流中的突变,为了响应这些事件,CPU会去查询异常表,找到对应条目的代码。然后就交给操作系统的子程序来处理,这就是操作系统实现的地方。系统中有哪些异常:异常和进程的关系:...

2018-12-30 18:12:11 180

原创 ## CSAPP读书日记-第七 章-链接-第一周

链接的基本过程:其中,gcc命令分为3步骤(可用-v命令运行gcc查看)1cpp(c预处理器):将.c文件翻译成一个ASCII码中间文件.i文件2.cc1(c编译器):将.i文件翻译成一个ASCII汇编语言文件.s3.as(驱动程序运行汇编器):将.s文件翻译成一个可重定位目标文件.0文件最后我们运行可执行文件prog的时候,只要./prog即可目标文件:链接:...

2018-12-09 21:07:20 148

原创 ## CSAPP读书日记-第六章-存储器层次结构

首先贴个图,展示存储器的层次结构:之所以这样设计存储器,就算为了以更低的成本达到接近于全部高级配备的才能达到的性能。(其中有个核心的思想:局部性原理)局部性原理有2种表现形式:1.时间局部性(被引用过一次的内存位置会在不久继续被引用)2.空间局部性(一个内存被引用了一次,在不久会引用其附近的)那么数据是如何被利用的呢?再来看个总线设计图:虽然不同的厂商有着不同的总线设计,但是上面的...

2018-12-02 19:52:31 202

原创 ## CSAPP读书日记-第三章-3

揭开递归的神秘面纱~C语言中的数组:指针运算:一切皆数据:

2018-11-18 19:32:03 183

原创 设计模式-builder模式(以微信消息的路由处理为例)

今天要讲一个简单的模式–builder模式。你可能会觉得,builder模式有什么好讲的?本来我也这样觉得,但当我有幸拜读某位大神通过builder模式写了一个开发工具包的初始化操作,嗯代码的样子很叼这位大神是谁呢?就是这位仁兄啦,是码云上一个很火的微信开发工具包的贡献者之一。一、言归正传,让我们来先看下业务:(1)目标:对微信端传来的用户消息进行处理。(2)需要解决的问题:消...

2018-11-13 12:18:09 1449 1

原创 ## CSAPP读书日记-第三章-2

首先,看到上图,你可能会感慨,汇编指令的种类就那么点,就凭借这个,支撑起了我们的复杂的业务代码。言归正传,让我来说下感触较深的知识点:一、计算机实现控制是靠“条件码”。“条件码”是由CPU维护的一组单个位的寄存器。有以下几类:设置“条件码”的指令有2个:CMP:根据2个操作数的差值来设置条件码TEST:根据2个操作数的和来设置条件码设置好了后,肯定要让人来访问,那么访问条件码的操作是...

2018-11-11 11:35:51 224

原创 使用lombok的@builder注解注释JPA的Entity遇到的坑

正确的代码如下所示:开始的时候,我没有加任何的构造器,然后JPA抛异常,说Entity需要默认的构造器(我用的关系映射框架是 spring data JPA, JPA之所以要默认的构造器,是因为它为对象的赋值是通过set方法进行的)接着我便加了个默认的无参构造器,然后运行时的编译直接报错了(这么说好像绕口,因为lombok的注解的编译异常无法被IDE检测到),具体错误如下:后来便推测,...

2018-11-09 16:08:21 2853

原创 ## CSAPP读书日记-第三章-1

CSAPP读书日记-第三章-1第三章主要讲程序是如何转为汇编代码的。刚开始看这一章的时候一头雾水,觉得跟现在的工作毫无关系,因为其就是引入了一堆非常用户不友好的指令,将你的代码转变为对内存或寄存器中的地址(间接)或值(直接)的操作。强行看了后,感觉有点说不清道不明的收获。。。先记一些知识点在下面,以作复习之用:1.每个寄存器的容量非常之小,现在最大也就是64位,目前x86-64的CPU一共包...

2018-11-05 19:37:03 130

空空如也

空空如也

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

TA关注的人

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