- 博客(200)
- 资源 (5)
- 收藏
- 关注
原创 学习笔记(01):redis高可用分布式锁精讲-redis普通锁与redlock锁实现
redis高可用分布式锁精讲,课程内容:1.jvm锁与分布式锁对比 2.redis普通锁与redlock锁实现 3.如何解决普通锁的问题?
2019-09-01 11:20:28
342
转载 分布式之数据库和缓存双写一致性方案解析
引言为什么写这篇文章?首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。文章结构本文...
2019-08-31 11:54:50
213
转载 数据结构C++
简介一、数组 1. 静态数组 array 2. 动态数组 2.1. vector 2.2. priority_queue 2.3. deque 2.4. stack 2.5. queue二、单向链表 forward_list三、双向链表 list四、树 1. set 2. multiset 3. map ...
2019-07-08 15:38:16
285
转载 STL无序容器unordered_map、unordered_set
简介很明显,这两个头文件分别是map、set头文件对应的unordered版本。 所以它们有一个重要的性质就是:乱序如何乱序这个unorder暗示着,这两个头文件中类的底层实现----Hash。 也是因为如此,你才可以在声明这些unordered模版类的时候,传入一个自定义的哈希函数,准确的说是哈希函数子(hash function object)。具有相同相同哈希值的元素被放在...
2019-07-03 16:28:04
1141
1
转载 数据库SQL“限制结果集行数”
限制结果集行数在进行数据检索的时候需要只检索结果集中的部分行,比如说“检索成绩排前三名的学生”、“检索工资水平排在第3位到第7位的员工信息”,这种功能被称为“限制结果集行数”。虽然主流的数据库系统中都提供了限制结果集行数的方法,但是无论是语法还是使用方式都存在着很大的差异。即使是同一个数据库系统的不同版本(比如MSSQLServer2000和MSSQLServer2005)也存在着一定的差异。...
2019-06-13 13:25:10
7129
原创 ubunti 16.04下安装redis
一,环境准备虚拟机VMware Workstation Pro系统:Ubuntu 16.04服务器二,下载redisroot 用户登录#cd /usr/local/src下载:#wget http://download.redis.io/releases/redis-3.0.7.tar.gz解压tar:tar xzvf redis-stable.tar.gzcd redis-stable编译:ma
2018-01-19 17:20:38
495
转载 g++的编译及调试
编译重命名等:g++ –c Hello.cc 编译文件,生成目标文件 Hello.og++ Hello.o –o abc 连接 并重命名为可执行文件 abcg++ Hello.cc 编译连接一起,生成a.outg++ Hello.cc –o hello 生成a.out并命名为hello1.总体选项 -E 只
2015-11-26 20:24:45
1068
转载 VS2005设置可以在Release模式下调试
一、首先:从“配置管理器”中将项目配置成Release版:在下拉列表中选择了Release后,点击“关闭”即可。 见图-1 。二、按Alt+F7:进入当前项目的属性设置:经过上面的设置,应该是“活动(Release)”,然后按下面的三个图示分别设置: 见图-2,图-3, 图-4, Debug通常称为调试版本,它包含调试信息,并
2015-11-14 10:53:34
1603
转载 Windows API教程文件系统
索引概念简介文件对象文件流文件句柄文件指针文件系统操作 常见 API高级文件操作本讲程序功能列表CreateFile具体参数返回值DeleteFile参数返回值CopyFile、MoveFile、FindFirstFileReadFileGetCurrentDirectory、FindNextFile更多改进学习方法小结本讲程序功能列表
2015-10-22 20:23:54
1956
转载 改变用户默认shell
查看用户当前shell。bigfish@wangyu-desktop:~ $ echo $SHELL /bin/bash/etc/passwd记录着用户的一些信息,其中最后是用户默认的shell。bigfish@wangyu-desktop:~ $ cat /etc/passwdroot:x:0:0:root:/root:/bin/shdaem
2015-09-15 21:37:25
3602
转载 如何创建用户组和用户
问:unix下创建用户组的命令是?答:groupadd [-g gid] groupname 说明: g 制定组的ID号 gid 组的ID号(不能与现有的组ID号重复) groupname 组名如:groupadd -g 110 vteam 问:unix下如何创建用户?答:useradd命令增加用户组 useradd [-u uid | -g group
2015-09-15 20:48:20
1463
原创 Linux里设置环境变量的方法(export PATH)
export AAA="hello" 只是把这个变量载入到内存中,而并没有写入哪个文件。就像ifconfig eth0 192.168.1.100 up一样,只是对内存进行操作,没有写入到磁盘上,而注销或重启之后,系统加载的磁盘上的文件。要想把他变成永久性的需要把他添加到开机启动的脚本中。/etc/profile、/etc/bashrc等式“全局”,开机之后自动加载,所有用户共享着些文件。
2015-09-15 20:31:50
1994
转载 VS2005 C++ 项目怎样添加“库目录”和“包含目录”
1. 添加编译所需要(依赖)的 lib 文件[解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。(等同于“#pragma comment(lib, "winsock.lib") ”语句)2. 添加库(Libs)文件目录方法 1:[解决方案资源管理器]“项目->属性->配置属性->连接器->常规
2015-09-09 10:42:21
3223
转载 线程同步(Linux_C++)
线程的同步互斥锁,读写锁,条件变量有两种方式创建在 posix 互斥锁,读写锁,条件变量有两种方式创建.静态方式和动态方式.POSIX定义了三个个宏:PTHREAD_MUTEX_INITIALIZER 来静态初始化互斥锁PTHREAD_COND_INITIALIZER 来静态初始化条件变量PTHREAD_RWLOCK_INITIALIZER 来静态初始
2015-09-07 23:51:35
593
转载 linux高级编程基础系列:线程间通信
线程间通信机制:线程是一种轻量级的进程。进程的通信机制主要包括无名管道、有名管道、消息队列、信号量、共享内存以及信号等。这些机制都是由linux内核来维护的,实现起来都比较复杂,而且占用大量的系统资源。线程间的通信机制实现起来则相对简单,主要包括互斥锁、条件变量、读写锁和线程信号等。本文会对以上所涉及的线程间的通信机制一一展开。互斥锁通信机制:
2015-06-07 15:45:21
494
转载 inline 和 宏定义的区别
inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。1.为什么要引入内联函数(内联函数的作用) 用它替代宏定义,消除宏定义的缺点。宏定义使用预处理器实现,做一些简单的字符替换因此不能进行参数有效性的检测。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。2.inline相比
2015-04-16 15:34:52
680
转载 linux多线程默认栈大小和最大线程数
linux的线程栈大小可以使用ulimit -s查看,对于ubunt 2.6的内核线程栈的默认大小为8M,如下:shine@shine-bupt:~/Program/C$ ulimit -s819232位的系统,虚拟内存空间是4G,其中1G是内核空间用户不可见,真正可以使用的内存空间大小是3G,具体参加下表:Linux的内存模型,一般为:
2015-04-16 12:04:38
2555
转载 C语言文件操作详解
C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有: 文件的打开操作 fopen 打开一个文件 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 f
2015-03-25 01:09:40
728
原创 计算txt文本中单词的个数
1,从txt文本中读取字符串2,计算单词数量,并将单词个数输出来#include "stdio.h" #include int main() { FILE *pf=NULL; int filelen=0, i = 0; char *buf; pf=fopen("test.txt","r"); if(pf
2015-03-07 22:11:40
1490
转载 Linux信号量 sem_t简介
函数介绍#include信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为:int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value));sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前
2015-02-27 22:14:00
3856
转载 System IPC 与Posix IPC(semaphore信号灯)
POSIX下IPC主要包括三种:posix message queueposix semaphoresposix shared memorysysytem v IPC包括:system v message queuesystem v semaphoressystem v shared memory 1.Semaphores在POSIX IPC中,每个I
2015-02-27 11:01:45
967
转载 ACE_Task 理解
ACE_Task 理解Table of Contents1 ACE_Task 究竟是什么1.1 类继承关系1.2 结构1.2.1 激活这个线程: activate() ,1.2.2 结束这个线程: wait() .1.2.3 运行这个线程: svc() ,1.3 用处1 ACE_Task 究竟是什么1.1 类继承
2015-02-27 10:01:20
1318
转载 TCP连接建立过程中为什么需要“三次握手”
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。互联网络与单个网络不同,因为互联网络的不同部分可能有着截然不同的拓扑、带宽、延迟、分组大小和其他参数。TCP的设计目标是能够动态的适应互联网络的这些特性,而且当
2015-02-25 14:57:00
575
转载 网络协议分析工具Wireshark
目录(?)[-]wireshark介绍Wireshark不能做的Wireshark VS Fiddler同类的其他工具什么人会用到wiresharkwireshark 开始抓包Wireshark 窗口介绍Wireshark 显示过滤保存过滤过滤表达式的规则封包列表Packet List Pane封包详细信息 Packet Details Panewireshark与对应的OSI七层模型TC
2015-02-25 13:53:47
793
转载 make常见错误
make 执行过程中所产生错误并不都是致命的;特别是在命令行之前存在“ - ”、或者 make 使用“ -k ”选项执行时。 make 执行过程的致命错误都带有前缀字符串“ ***”。错误信息都有前缀,一种是执行程序名作为错误前缀(通常是“ make ”);另外一种是当 Makefile 本身存在语法错误无法被 make 解析并执行时,前缀包含了 makefile文件名和出现错误的行号。在
2015-02-05 14:16:47
632
转载 Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
知识背景:210.25.132.181属于IP地址的ASCII表示法,也就是字符串形式。英语叫做IPv4 numbers-and-dots notation。如果把210.25.132.181转换为整数形式,是3524887733,这个就是整数形式的IP地址。英语叫做binary data。(其实binary是二进制的意思)详细介绍,请参考: 网络字节序与主机字节序的转换
2015-01-28 07:15:57
781
转载 iptables
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。filter负责过滤数据包,包括的规则链有,input,output和forward;nat则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;mangle表则主要应用在修改数据包内容上,用来做流量整形的,默认的规则
2015-01-28 06:55:05
919
原创 UDP
一般的处理方式有以下2种情况:一、服务器不需要保存客户端的上下文逻辑数据: 这种情况处理起来比较简单,以下为大概的处理流程: 1,ListenThread接收到数据后,把数据和对方的端口和IP插入数据包队列 2,WorkThread线程处理数据包队列中的数据后把需要发送的数据插入发送队列 3,SendThread发送数据给客户端二、服务器需要保存客户端的
2015-01-17 10:06:13
656
转载 Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
Linux下测试代码:TCP模型 1 //TCPClient.c 2 #includestring.h> 3 #includein.h> 4 #include 5 #include 6 #include 7 #define MYPORT 4000 8 #define BACKLOG 10 9 #define MAX_LEN 10010 11 int ma
2015-01-17 00:29:56
3609
转载 IO复用高级应用:同时处理TCP和UDP服务
一个socket只能与一个socket地址绑定即一个socket只能监听一个端口,服务器如果要同时监听多个端口就必须创建多个socket,若在同一个端口监听多个服务也要创建多个socket绑定到这个端口上。现在服务器监听一个端口上的TCP和UDP请求,并将发送来的数据回射到客户端。服务端程序: ?12345
2015-01-16 23:47:19
1000
转载 分布式缓存-Memcached
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。什么是Memcached许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器
2015-01-13 12:59:48
577
转载 SIP鉴权—摘要式认证
SIP认证过程源自HTTP摘要式认证(HTTP Digest Authentication),它是一种基于质询的安全机制:当服务器收到一个请求,将质询请求的发起者,要求提供相应的身份信息。服务器发出的质询中会包含生成的唯一字符串序列,仅可用于本次质询。请求者和服务器共享同一密码,请求者使用该密码和临时生成的字符串序列得到一个响应值。当请求者再次发送包含这个响应值的请求时,服务器就可以用来对请求
2015-01-07 15:42:39
1688
原创 Linux守护进程
Linux 守护进程的编程方法 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。 守护进程的编程本
2015-01-07 00:56:58
539
转载 Xargs用法详解
1. 简介 之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令,例如:find /sbin -perm +700 |ls -l 这个命令是错误的find /sbin -perm +700 |xargs ls -l 这样才是正确的xargs 可以读入 stdin 的资料,并且以空白字元或
2015-01-03 11:45:08
505
转载 Linux下chkconfig命令详解
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。使用语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level ][系统服务][on/off/reset]chkconfig在没有参数运行时,显示用法。如果
2014-12-26 16:56:57
417
转载 50条最频繁使用的 UNIX/LINUX命令
1. tar command examplesCreate a new tar archive.$ tar cvf archive_name.tar dirname/Extract from an existing tar archive.$ tar xvf archive_name.tarView an existing tar archive.$ tar t
2014-12-26 00:44:58
914
转载 Makefile典型模板
一般应用程序的MakefilePRGM = zztestCC = gccCPPFLAGS =LDFLAGS = -lrt -lzCFLAGS = -Wall -ggdb3COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) -cLINKCC = $(CC) $(LDFLAGS)LIBA = libcshm.aSRCS :=
2014-12-24 16:18:30
621
转载 linux strip
strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小程序的大小,在rpmbuild包的最后就用到。其支持的选项如下:>strip -h用法:strip 输入文件从文件中删除符号和节 选项为: -I --input-target= Assume input file is in format -O --output-target=
2014-12-24 16:17:32
5267
原创 g++ 编译动态链接库和静态链接库
现在我有hello1.cpp和hello2.cpp两个文件,现在我要生成动态链接库libhello.so和静态链接库libhello.a。以下为步骤:1.生成动态链接库:g++ -m32 hello1.cpp hello2.cpp -fPIC -shared -o ../lib/linux32/libhello.so-m32为生成32位的动态链接库,-m64位生成64位的动态链接库
2014-12-24 09:59:56
4852
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人