- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 ThreadLocal的用法理解
其实很简单,就是创建一个对象,然后每个线程去访问时,访问的是这个对象的副本。即该对象会为每个线程拷贝出一个副本。其实效果和local variable是一个效果。即在线程内初始化一个本地变量。ThreadLocal<String> threadLocalOld = new ThreadLocal<String>(){ @Override protected String initialV
2018-01-08 16:46:51
941
原创 Synchronized的理解
互斥锁,锁住一块代码区。 提问:什么叫互斥锁?互斥锁又叫排他锁,它作用于一块代码区,则同一个时刻,只允许有一个线程访问,不管是读还是写。两种用法: 作用于方法内的一块代码区。 Synchronized(object){} 含义:object是Object类的一个实例(即除非基本类型外的任意对象实例),每个实例有一个对象锁。这句语法的含义就是:只有获得了object的对象锁,才能执行{}内的
2018-01-03 15:41:23
426
原创 浅析聚集索引
“聚集索引决定了数据的物理顺序”—这是大家都知道的一句话,但是这句话到底是啥意思呢?这里好好说一说。 有一个例子非常形象:聚集索引:一个汉语字典,我们希望查找“张”,我们可以直接翻到字典的最后,找到zh开头,然后找到张。因为字典内容本身是按照拼音排版的,所以字典内容本身就是一个聚集索引。非聚集索引:在查找一个不认识的字的时候,我们可以先通过字典的偏旁部首目录,找到字在哪一页,然后通
2017-09-18 11:29:53
2914
2
原创 HashMap和ConcurrentHashMap的浅析
HashMap和ConcurrentHashMap的浅析 主要是说一下自己的理解。首先是HashMap的内部数据结构,以及ConcurrentHashMap线程安全的原因,缺点以及一些问题。
2017-09-13 17:39:42
1578
原创 一致性哈希的浅析
最近的工作涉及到了一致性哈希,就抽了点时间研究了一下,发现网上的一些文章其实理解的不够准备,这里说一下我自己的看法。希望对读者有所帮助
2017-05-24 18:06:00
953
原创 python中decorator的用法及原理(一)
0、 概念什么叫装饰器,其实也可以叫做包装器。即对于一个既有的函数func(args),在调用它之前和之后,我们希望都做一些事情,把这个函数包装起来。python中的装饰器分为两类:函数装饰器和类装饰器。这里我们先讨论函数装饰器。1. 不带参数的decorator(1) 基本用法:def decorator1(func): def dec(*args):
2016-04-05 16:03:55
20900
2
原创 python中的logging模块
最近在做一个flask的项目,其中需要使用logging模块以来记录日志信息。以下是自己的切身的体会和感悟,希望对读者有所帮助。1. 基本用法首先我们来看一下logging的基本语法。import loggingfrom logging.handlers import RotatingFileHandler# 创建一个logger对象,一般web框架本身会有一个,比如flas
2016-03-30 10:33:19
591
原创 python的垃圾回收机制
python的垃圾回收机制一、 总述在python中主要就是使用引用计数的方式来进行垃圾回收的。但是引用计数存在两个问题:无法解决循环引用和效率比较低。为此python中使用标记清除的方式来解决循环引用的问题,使用分代回收的方式来解决效率低的问题。即Python 中垃圾回收机制: 引用计数(主要), 标记清除, 分代回收(辅助)二、 分类python中不同类型的对象使用不同的垃圾回收机制:
2016-03-22 16:30:46
571
转载 Apache Thrift - 可伸缩的跨语言服务开发框架
前言:目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善。本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服
2015-12-29 09:29:27
438
原创 正向代理和反向代理的区别
正向代理正向代理,也就是我们通常说的代理。假如说我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容代理服务器去取回来,然后返回给我。这就是正向代理。反向代理反向代理是相对于正向代理而言的。假如说用户访问一个网址:http://aaaa.com/play.h
2015-12-21 18:06:15
450
转载 epoll详解
什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epol
2015-09-12 15:44:01
566
原创 Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性
一、 简介假设我们本章讨论的主机都是支持双栈的,即支持IPv4地址,也支持Ipv6地址。我们本次讨论的点:客户端与服务器端使用的是不同类型的地址。因为相同类型的地址没什么可讲的。 二、 IPv4客户端与IPv6服务器即,客户端使用IPv4地址套接字来通信,服务器端使用IPv6地址套接字通信。原理:0. 首先IPv6服务器主机保证既有IPv4地址,又有IPv6地址。1
2015-07-09 17:23:47
1198
原创 Unix网络编程学习笔记之第11章 名字与地址转换
一、 域名系统(DNS)1. 简介DNS主要用于主机名和IP地址之间的映射。主机名可以是简单的名字ljm,也可以是全限定域名ljm.localdomainbaidu.com等。 2.资源记录DNS中的条目称为资源记录(RR)。我们感兴趣的RR类型只有几个:A A记录把一个主机名映射为一个32位的IPv4地址。AAAA 4A记录把一个主机
2015-07-09 17:19:42
1464
原创 Unix网络编程学习笔记之第8章 基于UDP套接字编程
一、 UDP C/S的典型函数调用UDP没有像TCP那样的连接,客户端直接sendto向某服务器发送数据,服务器端一直recvfrom阻塞,以接收任何客户端发送的数据。 二、 sendto和recvfrom函数int sendto(int sockfd, const void* buff, size_t nbytes, int flag, const struct sock
2015-07-09 17:06:08
1176
原创 Unix网络编程学习笔记之第7章 套接字选项
一、获取/设置套接字选项的方法一个套接字描述符相关联的套接字选项很多。获取/设置套接字选项的方法:1. getsockopt和setsockopt函数2. fcntl函数3. ioctl函数 二、 getsockopt和setsockopt函数int getsockopt(int sockfd, int level, int optname, void* optval
2015-06-17 13:00:04
1240
原创 Unix网络编程学习笔记之第6章 I/O复用:select和poll函数
一、I/O复用应用场合1. 当客户处理多个描述符(既有标准输入,又有网络套接字)时,必须使用IO复用。2. 一个客户同时处理多个套接字是可能的。3. 如果一个服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用。4. 如果一个服务器既要处理TCP,又要处理UDP,一般就要I/O复用。5. 如果一个服务器要处理多个服务或协议,就要用到I/O复用。其实IO复用
2015-06-01 14:00:30
1095
原创 Unix网络编程学习笔记之第5章 TCP客户端/服务器程序示例
一、 一个简单TCP回射服务端程序#include "unp.h"#define MAXLINE 1024#define PORT 13#define CONMAX 5void err_sys(const char* s){ fprintf(stderr, "%s\n",s); exit(1);}void str_echo(int connfd){ in
2015-05-29 14:49:44
1052
原创 Unix网络编程学习笔记之第4章 基于TCP套接字编程
1. socket函数int socket(int family, int type,int protocol)成返回一个套接字描述符。错误返回-1其中family指定协议族,一般IPv4为AF_INET, IPv6为AF_INET6。其中type指定套接字类型,字节流:SOCK_STREAM. 数据报:SOCK_DGRAM。一般情况下通过family和type的组合都可以
2015-05-27 16:51:45
924
原创 Unix网络编程学习笔记之第3章 套接字编程简介
1. 首先我们说一个IPv4的套接字地址结构:struct in_addr { in_addr_t s_addr;//!};struct sockaddr_in{ uint8_t sin_len; sa_family_t sin_family;//! int_port_t sin_port;//! structin_ad
2015-05-25 15:14:39
600
原创 Unix网络编程学习笔记之第2章 TCP和UDP
TCP1. TCP面向连接的协议,是一个字节流协议,没有任何记录边界。发送的是数据分组。2. TCP提供了可靠性:确认重传和重组 (1) TCP每发送一份数据都会要求对端进行确认。如果超时,就会重传。TCP会估计往返时间RTT,以确定等待多长时间重传。(2) 如果多次发送数据分组,TCP可以保证分组的按序达到。即会根据序列号进行重组。3. TCP提供流量控制TCP在
2015-05-22 10:06:13
921
原创 Unix网络编程学习笔记之第1章 简介
一、一个简单的时间获取客户端#include #define MAXCON 50#define MAXLINE 1024#define PORT 13void err_sys(const char* s){ fprintf(stderr, "%s\n",s); exit(1);}int main(int argc, char** argv){ int s
2015-05-20 17:22:34
796
原创 C++之内部类
1. 内部类:如果一个类定义在另一个类的内部,这个内部类就叫做内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。即说:内部类就是外部类的友元类。注意友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。 2. 内部类可以定义在外部类的public、protect
2014-11-04 17:02:17
29365
2
原创 C++之shared_ptr总结
C++关于shared_ptr的总结。里面有一份简单的源码实现,有助于理解shared_ptr的实际原理。希望对大家有帮助。也欢迎批评指正。
2014-09-29 09:16:16
38876
原创 C++中的友元的体会
友元:假设A中声明了B是我的朋友,则在B内就可以使用了我(A)的一切数据,包括private类型数据。友元的出现破坏了类的封装和隐藏性。 C++中的友元分为:友元函数和友元类1. 友元函数:在类中声明,在类外定义:class A{public: A(int i):m_i(i){}private: friend void print(Aa);
2014-09-05 13:44:02
902
1
原创 DLL的前世今因
网上的有关DLL的文章有很多,也很杂。这里我花了一段时间,查了资料,把各种版本自己动手试了试。以下是我的学习笔记,希望对大家有所帮助。DLL:动态链接库。动态链接库就是一种别人已经写好的代码(一般是函数或类),并且已经编译和链接好了,我们只是需要按照一定的规则就可以使用这些代码。并且动态链接库是可以进行跨语言的。就是说C的DLL可以在Java中使用。DLL是与exe分开的,
2014-08-28 15:31:10
944
原创 #define的用法体会
#define 创建一个宏,该宏是标识符或参数化标识符与标记字符串的关联。 在定义宏之后,编译器可用标记字符串替换源文件中标识符的每个匹配项。语法#define identifier token-string #define identifier ( identifier 1 , ... , identifier n ) token-string 备注1 #define 指令促
2014-08-27 09:26:12
3679
转载 字符编码笔记:ASCII,Unicode和UTF-8
1. ASCII码我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。上个世纪60年代,美国制定了一套字符编码,对英语字符与
2014-08-26 16:09:13
490
原创 查找数组中重复次数最多的数字
题目:给定一个大小为n的数组,该数组包含数字的范围在 [0...k-1], k是一个正整数,k 要求时间复杂度为n,空间复杂度为1,可以使用原数组。原理:遍历数组,让每个元素作为下标的元素加k,最后谁的值最大,则它对应的下标就是要求的值。解法:遍历数组,每个元素值作为下标的元素+=k;由于会改变数组后面的值,而我们还要根据数组本来的值作为下标呢,所以这里,数组原来的值=数组
2014-08-12 12:53:59
5980
原创 C#2.属性心得
属性的本质:就是对类中的变量的属性(只读、只写、读写)进行控制。属性也可以看成“变量”。1. 普通属性 class A { privateint a; privateint b; public int aA { get{ return
2014-06-20 18:50:23
454
原创 C# 1.数组心得
数组的定义1. 一维数组int[]a=new int[10];2. 多维数组二维:int[, ] a =new int[10,10];a[0,0]=5;三维:int[, , ] a=new int[10,10,10];注意用多维数组定义的数组,不能用a[i][j]此类的访问,只能用a[i ,j],a[i,j,k]来访问。3. 数组的数
2014-05-31 15:48:38
839
转载 关于C++代码缓冲区溢出
缓冲区溢出通常表现为一个最为常见的漏洞而存在于今天的各种软件之中,黑客可以用恶意的输入,从而更改程序的执行流程,由此入侵相应的进程、电脑、或整个域。如果进程运行于一个高度受信的账户之下,如管理员或本地系统账户,那么黑客带来的破坏将是极其严重,并有潜在广泛传播的危险。近几年来爆发的一些"知名"病毒,如红色代码、冲击波、震荡波等等,都源于C/C++代码缓冲区溢出的结果。 从程序的角度来看,缓
2014-05-05 21:44:07
3898
1
高质量C++/C编程指南
2015-09-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人