程序员攻略

Stay hungry ,Stay foolish!
私信 关注
程序员攻略
码龄10年

黄强老师,国家软件设计师,高级软件开发工程师,项目经理、产品经理、金牌讲师、 创业合伙人,多年C、C++开发经验,尤擅长游戏开发、服务器开发及移动互联网项目的开发!

  • 414,050
    被访问量
  • 207
    原创文章
  • 10,421
    作者排名
  • 291
    粉丝数量
  • 毕业院校 湖北第二师范学院
  • 目前就职 南京文思创新技术软件公司
  • 于 2010-09-26 加入CSDN
获得成就
  • 博客专家认证
  • 获得164次点赞
  • 内容获得48次评论
  • 获得845次收藏
荣誉勋章
兴趣领域
  • #运维
    #网络
TA的专栏
  • 新手C语言
    1篇
  • Linux 网络编程
    14篇
  • Windows 多线程并发编程
    6篇
  • Windows网络编程
    21篇
  • Linux 多线程并发编程
  • 视频教程
    18篇
  • windows C/C++
    76篇
  • Linux C/C++
    18篇
  • template
    17篇
  • C++11
    11篇
  • C++14
    1篇
  • JAVA J2EE
    6篇
  • .NET C#
  • COM
    2篇
  • Web开发
    5篇
  • Linux系统
    3篇
  • Python
    21篇
  • 多线程
  • 网络
    35篇
  • 数据库
    2篇
  • 算法/数据结构
    4篇
  • 设计模式
    1篇
  • IOS开发
  • STL与Boost
    1篇
  • MFC
    3篇
  • Unity3D
    2篇
  • Lua
    17篇
  • Redis
    1篇
  • 嵌入式开发
    1篇
  • 工作/生活
    5篇
  • 工具
    4篇
  • 课程设计
    12篇
  • 项目管理
    4篇
  • 新手指引
    7篇
  • 计算机理论
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

程序员接开发网站

1.程序员客栈网址:https://www.proginn.com/2.快码众包网址:https://www.kuai.ma/3.Coding码市网址:https://codemart.com/4.开源中国包网址:https://www.oschina.net/5.码易网址:https://www.mayigeek.com/6.人人开发网址:https://www.rrkf.com/7.开发邦网址:https://www.kaifabang.com/..
原创
57阅读
0评论
0点赞
发布博客于 3 月前

Stronghold 2 要塞2 十字军东征 如何金币无限,轻松过关

大家知道,《要塞》这个游戏特别好玩,但是大家玩过Stronghold_Crusader_Extreme,发现特别难啊!里面的电脑太残暴了,被虐的不要不要的,好在我是程序员,可以把金币弄成无限,这样就轻松过关了,但是这里仅供大家娱乐,请支持正版游戏,想学的qq我 354974212!下面秀出我的战绩:...
原创
223阅读
0评论
0点赞
发布博客于 6 月前

new的全局重载,类内部重载!

最近,有个童鞋问我,他对下面这种new的奇怪写法不明白,很怪异,不像平时的用法,其实这个是new的一种用法而已,只是他接触的少,所以迷糊了,看看下面的代码,大家就知道为什么可以这么写了!#include <iostream>using namespace std;void* operator new(size_t size){ cout << "全局new重载 " << size << endl; return mallo..
原创
87阅读
0评论
0点赞
发布博客于 7 月前

C语言各种类型所占字节数与取值范围

最近很多童鞋对C语言的各种数据类型占得字节数与范围搞不清楚,导致数据范围不足的隐形Bug! 比如一个数是100000,但是该学生用short a = 100000 ; 很明显超出short范围了,最后导致a 是另外一个值,那么今天黄老师就带领大家用代码亲自验证下各种数据类型所占得字节数,不要求你记得死死的,只要有大致印象即可!#includ...
原创
412阅读
0评论
1点赞
发布博客于 10 月前

新手如何学好C语言?

作为一名资深码农,在软件行业也拼搏了十多年,这里跟想学习C语言的萌新童鞋分享下我的个人学习心得!!!在大学时代,我们大二才开始学习C语言(起步有点晚啊),第一次看到那本黄黄的谭浩强老师的《c语言教程》,哈哈哈,就是这本了,满满的回忆啊!开学拿到这本书后,心情很激动,因为以前总是羡慕那种黑客,好像很牛的样子, 抱着好奇的心理随便翻开了几页看了看,全程一脸懵逼, 因为以前从来没有接触过编程...
原创
573阅读
0评论
0点赞
发布博客于 10 月前

一个普通的计算机专业专科生,毕业后想拿高薪,大学三年具体应该怎么做?

最近有一位大一的童鞋问我:黄老师, 我现在是一个普通院校的专科,学历含金量并不高,随大流选了一个计算机专业,很迷茫,不知道毕业后能干嘛,但我还是不想虚度大学三年,因为家境并不好,想通过自己努努力毕业能拿一份不错的薪水,能给点建议吗?其实也不是这一位同学向我咨询类似的问题,这几年其实蛮多的普通院校大学生都感到压力,因为没有名校背景,没有较高的学历,大学毕业后,只能进入普...
原创
1492阅读
0评论
1点赞
发布博客于 10 月前

5种IO模型

在早期的文章《unix IO模型》中我们介绍了5种IO模型,如下图是几种IO模型的对比几种IO模型的对比从上面的图可以看出,从左到右,越往后,阻塞越少,理论上效率也就越优。其中Select对应的是第三种IO模型:I/O Multiplexing IO多路复用模型,而epoll与kqueue其实和Select一样也属于I/O Multiplexing IO多路复用模型,只是相比于se...
原创
147阅读
0评论
0点赞
发布博客于 2 年前

TCP的四次挥手为什么需要2MSL ?

众所周知,TCP建立连接三次握手,断开连接四次挥手,具体流程如下:MSL是什么意思?MSL, the maximum segment lifetime (最长报文段寿命) 。 segment可以在网络中存活的最长时间,超过这个时间会被丢弃。这个时间限制是有界限的,TCP Segment通过IP datagrams进行传输,IP datagrams使用ttl属性来定义这个时间。R...
原创
902阅读
0评论
0点赞
发布博客于 2 年前

TCP网络状态变换时序图

关于TCP网络编程,大家一定要有以下的图:
原创
299阅读
0评论
0点赞
发布博客于 2 年前

linux下 IO 阻塞 非阻塞

1.区分堵塞、非堵塞在一个IO操作过程中,以read为例,会涉及到两个过程:1.等待数据准备好;2.将数据从内核拷贝到进程中这两个阶段是否发生阻塞,将产生不同的效果。堵塞IO:进程在请求read阻塞io的数据时,操作需要彻底完成后才返回到用户空间非堵塞IO:进程在步骤1不堵塞,如果数据没准备好,read(io操作)函数会立即返回一个状态值反馈给进程,所以对于非阻塞io,可以用一...
原创
131阅读
0评论
0点赞
发布博客于 2 年前

epoll ET模式的demo

#include <stdio.h>#include <sys/epoll.h>#include <sys/socket.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>#include <fcntl.h>#i...
原创
145阅读
0评论
0点赞
发布博客于 2 年前

IO多路复用的三种机制Select,Poll,Epoll

I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。相信大家都了解了Unix五种IO模型,不了解的可以 =>查看这里[1] blocking I...
原创
112阅读
0评论
0点赞
发布博客于 2 年前

CGI、FastCGI、WSGI 究竟是什么?

CGICGI(Common Gateway Interface,通用网关接口 ),描述了服务器和客户端请求处理程序(通常就是浏览器)之间传输数据的一种标准。它最初是在1993年由NCSA(美国国家超级电脑应用中心)为NCSA HTTPd Web服务器开发的。CGI的第一个实现是采用Perl编写的。Perl被广泛用于编写CGI程序,但CGI本身是独立于任何语言的。事实上,CGI程序可以使...
转载
329阅读
0评论
1点赞
发布博客于 2 年前

Python多线程(模拟火车站售票)

Python的标准库提供了两个模块:thread和threading,thread是低级模块,threading是高级模块,对thread进行了封装。我们使用threading这个高级模块,模拟火车站卖票,如果不加锁,卖出同一张票:import threading from time import sleep, ctimeN = 100 # 100张票def Sell(n...
原创
2078阅读
0评论
1点赞
发布博客于 2 年前

Python UDP 网络编程

Python UDP网络编程,流程和其它语言没有区别,但更简洁:#服务器端 server.py# 导入 socket、sys 模块import socketimport sys# 创建 socket 对象serversocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 获取本地主机名host = soc...
原创
172阅读
0评论
1点赞
发布博客于 2 年前

Python TCP 网络编程

Python TCP网络编程,流程和其它语言没有区别,但更简洁:#服务器端 server.py# 导入 socket、sys 模块import socketimport sysimport _thread# 创建 socket 对象serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)...
原创
117阅读
0评论
0点赞
发布博客于 2 年前

Python格式化输出

两种方式,一种与C语言类似,另外一种比较陌生:# 使用 %print("字符%c" % ('A'))print("整数%i" % (-100))print("无符号整数%u" % (100))print("十进制%d %d %d" % (0b10, 0o10, 0x10))print("左占位%5d" % (10))print("%-05d右占位" % (10))pri...
原创
564阅读
0评论
0点赞
发布博客于 2 年前

Python包

为了组织好模块,会将多个模块分为包。Python 处理包也是相当方便的。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件。    常见的包结构如下:    最简单的情况下,只需要一个空的 __init__.py 文件即可。当然它也可以执行包的初始化代码,或者定义稍后介绍的 __all__ 变量。当然包底下也能包含包,这和文件夹一样,还是比较好理解的...
转载
109阅读
0评论
0点赞
发布博客于 2 年前

Windows下 Python3.7 访问 Mysql

Python访问Mysql数据库不要太简单:1.打开Python的安装目录:2. 使用Python 包管理工具 pip 对Python 包的查找、下载、安装、卸载的功能:pip.exe install pyMysql可以发现pyMysql包已经安装2.上代码,测试:import pymysql# 打开数据库连接db = pymysql.connec...
原创
2367阅读
0评论
2点赞
发布博客于 2 年前

Python变量作用域

python变量的生命周期,局部变量、全局变量基本与C语言差不多,唯一要注意的是:python能改变变量作用域的代码段是def、class、lamda。 而语句块比如if/elif/else、try/except/finally、for/while 并不能改变量作用域。a=111 #全局变量def fun(): print(a)#全局变量def fun2():...
原创
125阅读
0评论
0点赞
发布博客于 2 年前

Python 的 object类、type元类

在C++,JAVA,C#等面向对象语言中, 类的实例 是 一个对象。在Python中, 类的实例 是 一个对象,这个没有问题,object类是一切类的父类,这也没什么问题。但是, type类有点元类的意思,我个人理解为 int,float,object , Animal等类 是 type元类的 一个实例(是一种类型)。#一切皆对象print(objec...
原创
1197阅读
0评论
0点赞
发布博客于 2 年前

Python判断类型

Python判断类型,基本类型主要使用type() , 对象类型使用 instance()print( type(123))print( type(123) == int)print( type("hello"))print( type("hello") == str)print( type(1.234))print( type(1.234) == float)print( ...
原创
4288阅读
0评论
1点赞
发布博客于 2 年前

Python继承与多态

与C++、JAVA等面向对象相比,Python继承与多态表现差不多:class Animal(object): def run(self): print('Animal跑') def eat(self): print('Animal吃')class Cat(Animal): def run(self): ...
原创
200阅读
0评论
0点赞
发布博客于 2 年前

Python面向对象写Student类

直接看代码写法:class Student: "这是Student类的说明" #__doc__ objCount = 0 #类的静态变量 def __init__(self, name, age): #构造函数,创建类的实例调用 print("构造方法!") self.name = name #self代表对象 ...
原创
2680阅读
0评论
0点赞
发布博客于 2 年前

Python模块 之 sys

sys 模块提供了许多函数和变量来处理 Python 运行时环境的不同部分.import sysprint( sys.argv ) #程序运行的参数print( sys.modules.keys() ) #返回所有已经导入的模块列表print(sys.version ) #获取Python解释程序的版本信息print(sys.modules) #返回系统导入的模块字段p...
原创
267阅读
0评论
0点赞
发布博客于 2 年前

Python模块 之 os

python的os模块,提供了文件和路径进行操作:import osprint( os.getcwd()) #当前文件所在目录print(os.path.isdir(".") ) #是否是目录p =os.path.abspath("test.py")#获取绝对路径print(p)print(os.path.dirname(p)) #获取路径的 目录部分print(os....
原创
98阅读
0评论
0点赞
发布博客于 2 年前

Python中的模块

一个python文件(以“.py”为后缀名的文件)就叫做一个模块。模块可以被项目中的其他模块、一些脚本甚至是交互式的解析器所使用,它可以被其他程序引用,从而使用该模块里的函数等功能,使用Python中的标准库也是采用这种方法。新建一个my.py文件:a="111"b={ "name":"lucy" , "age":100}def fun(): print("fun...
原创
85阅读
0评论
0点赞
发布博客于 2 年前

Python强大的函数

Python的函数比C语言、C++函数更加灵活与强大,下面来跟大家演示:# 函数,无返回值def show(s): print("Welcome", s)show("hello")# 函数,有一个返回值def sum(a, b): return a + bprint(sum(111,222))# 函数,返回的是tuple元组 (好像返回多个值)de...
原创
119阅读
0评论
0点赞
发布博客于 2 年前

Python的注释、Lua的注释、C语言的注释

Python的注释:# 这是单行注释'''这是多行注释,用三个单引号这是多行注释,用三个单引号这是多行注释,用三个单引号'''"""这也是多行注释,用三个双引号这也是多行注释,用三个双引号这也是多行注释,用三个双引号"""Lua的注释:--这是单行注释--[[这是多行注释这是多行注释这是多行注释--]]--[=[这是多行注释这是多...
原创
204阅读
0评论
0点赞
发布博客于 2 年前

Python循环语句

Python的while 与 for ,基本上与C语言差不多,注意写法#while循环i = 0while (i < 5): i = i + 1 if i>3: break; print ('i:', i)#for 循环for k in range(0,5): # 0可以省略 if k >3:...
原创
85阅读
0评论
0点赞
发布博客于 2 年前

Python条件语句

python 最具特色的就是用缩进来写模块 , 缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。#注意以下两者的区别if False: print("Hello") print("World")if False: print("Hello2")print("World2")a=90if a&l...
原创
78阅读
0评论
0点赞
发布博客于 2 年前

Python运算符(区别于C语言的)

Python大部分与C语言运算符一样,也有一些标新立异的:print(3**2) # 3的2次方print(3/2) # 3除2 ,得到是小数,不是整数1print(3//2) # 3除2 ,得到整数1a= 3;a**=2 # a = a的2次方print(a)a//=2 ...
原创
429阅读
0评论
0点赞
发布博客于 2 年前

Python强大的类型转换

Python内置的函数可以执行各种数据类型之间的转换。print( int("10") ) #十进制的字符串10->整数10print( int("10", 2) ) # 二进制的字符串10->整数2print( int("10", 8) ) # 八进制的字符串10->整数8print( int("10", 16) ) # 十六进制的字符串10->整数16pr...
原创
119阅读
0评论
0点赞
发布博客于 2 年前

Python 字符串、列表、元组、字典

Python有五个标准的数据类型:Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典)print("----------字符串------------")s = '123456'#s[2]='A'print(s)print(s[0]) # 索引从左0开始print(s[5:]) # 索引5开始print...
原创
78阅读
0评论
0点赞
发布博客于 2 年前

Lua的 setfenv函数

setfenv函数可以设置全局环境中有的变量或者函数,通过_G可以查看拥有的函数(比如print、setfenv等)与全局变量, 但是修改_G的指向一张空表 对系统环境是没有影响的,因为系统并不是访问_G来获取相关函数与变量!!!理论总是枯燥,需要代码来验证:print(_G)_G.a=111--_G ={} --对系统环境没有影响print(a) --正常使用print 与...
原创
404阅读
0评论
0点赞
发布博客于 2 年前

lua _G 表

今天研究一下_G这张表:-- _G是一张表,保存了lua所用的所有全局函数和全局变量for a,b in pairs(_G) do print(a,"\t",b) if type(b) == "table" then for x,y in pairs(b) do print("\t","|--",x,y) ...
原创
4747阅读
2评论
5点赞
发布博客于 2 年前

lua中的闭包

闭包(closure):外部函数+ 非局部变量(upvalue) + 内部函数(闭包函数)function fun( n ) --外部函数 -- n是lua中的upvalue return function() --内部函数 n=n+1 return n end , function() --内部函数 ...
原创
257阅读
0评论
0点赞
发布博客于 2 年前

Lua全局变量与局部变量

在lua中,局部变量(变量名前加 local)与全局变量类似于C语言中的概念:print(a) --打印变量nila=111 --全局变量(整个lua文件中都可以使用,向下的范围)do local a=0--局部变量在语句块的结束 a=1 --局部变量优先 print(a)--局部变量 print(b) --打印变量nil b=...
原创
3697阅读
0评论
1点赞
发布博客于 2 年前

lua的注释写法

lua中的注释不是 // , /**/ ,而是标新立异的 ,--print("单行注释")---print("单行注释")--[[print("整段注释")print("整段注释")print("整段注释")]]--[=[print("整段注释,=号个数随意")print("整段注释,=号个数随意")print("整段注释,=号个数随意")--]=]...
原创
8270阅读
0评论
0点赞
发布博客于 2 年前

Lua面向对象之继承( Student类继承自Person类)

继承是面向对象中一个很重要的特性,要想在lua中实现该特性也相对比较简单,配合元表和__index元方法,让派生类与基类形成一条链,前面我们学习了Student类,那么我们让Student类继承自Person类,看代码:-----------------基类---------------------Person = {};-- 设置__index键为一张表,这个表是自己Pers...
原创
436阅读
0评论
0点赞
发布博客于 2 年前

Lua面向对象写Student类( 模拟类方法与对象方法)

前面我们写出了一个简单的类Student,但是我们发现,我们直接使用Student也可以调用对象方法,这里和我们们学过的其它语言的面向对象还是有些出入的(比如C++,JAVA ,C# , 类名称是无法调用对象的方法与属性),所以这里改造一下,让类方法、类变量, 与 对象方法,对象变量 分离。代码如下:-- 定义类型Student = {}; -- 定义类型属性(相当于静态成...
原创
367阅读
0评论
0点赞
发布博客于 2 年前

lua 元表中的 __newindex 键

先看__newindex的用法介绍:①如果table的元表没有__newindex,会在一开始的表中创建对应的字段。②如果table的元表的__newindex是一个函数,在给table不存在的键赋值时,会调用此函数。③如果table的元表的__newindex是一个表,在给table不存在的键赋值时,会给__newindex对应表中的相应字段赋值。(即使key事先并不存在)...
原创
239阅读
0评论
0点赞
发布博客于 2 年前

lua元表概念

元表,听起来高大上,说白了,就好像一个附属表一样。。。比如有个表t, 为表t设置一个元表t2, 加入t中没有的东西,如果有元表,将会去t2去找找。。。t={}--table默认没有元表print(getmetatable(t))t="hello"--字符串默认有元表print(getmetatable(t))t={}t2={}--为t设置元表t2setmeta...
原创
99阅读
0评论
0点赞
发布博客于 2 年前

lua元表中的 __index键值

学了元表,里面的一个很重要的键值 __index , 当我们通过键去访问一个表时,如果不存在这个键,lua还会尝试搜索表的元表的__index键值,没有则返回nil1.如果元表中的__index键对应的是表, 直接搜索键名,搜索不到返回nil2.如果元表中的__index键所对应的是函数,则调用函数并传递 表和键 两个参数, 返回函数返回值t = {1,2,3,4 }print( ...
原创
795阅读
0评论
0点赞
发布博客于 2 年前

Lua面向对象写Student类

面向对象大家都不陌生了, lua可以使用表(table) , 元表(metatable)来模拟面向对象设计 , 我们来使用Lua写一个简单的Student类-- 声明类型Student = {};-- 设置__index元方法(关键)Student.__index = Student;-- 定义构造函数function Student:Create() ...
原创
151阅读
0评论
0点赞
发布博客于 2 年前

lua中冒号与点的区别

冒号: 只是起了省略第一个参数self的作用,该self指向调用者本身,并没有其他特殊的地方。Girl = {money = 200}function Girl.goToMarket(Girl ,cost) Girl.money = Girl.money - cost print("Girl剩余", Girl.money)endGirl.goToMarket(...
原创
316阅读
0评论
0点赞
发布博客于 2 年前

lua中的table类型

lua中的table类型确实很灵活,灵活到大家发挥想象力,随意发挥--lua中的表太强大了 t={} t.a=111 t["b"] =222 t[-3] ="bbb" t.t={1,2,3,4,5} -- 定义一个函数 function t.fun(p) io.write("
这是第一个函数! ",p) end t.fun2 = functi...
原创
657阅读
0评论
0点赞
发布博客于 2 年前

让你真正理解 lua 泛型for

最近在看lua,看到泛型for一脸懵逼,完全不知道究竟是怎么运转的,今天拿一个常见的例子来跟大家讲个透彻!!!泛型 for 的执行过程:(1) in 后面表达式应返回:迭代函数、状态常量、控制变量; 如果表达式返回的结果个数不足三个会自动用 nil 补足,超出三个的会被忽略。(2) 向迭代函数 传入两个参数 状态常量、控制变量,迭代函数的第一个返回值 如果为nil ,则停止...
原创
626阅读
0评论
3点赞
发布博客于 2 年前

Lua有状态迭代器

lua中的迭代器通常使用函数来实现,当我们调用一次迭代器函数的时候,返回集合中的下一个元素,到这里,我们知道,那这个迭代器函数必须保存上一次调用时的一些状态,以便下一次调用,lua中的closure正好符合要求,我们可以把上一次调用的信息保存在closure中,然后就是我们需要一个返回这个迭代器的函数,我们可以把这个函数叫着生成迭代器的工厂函数。看概念头疼,直接撸代码--迭代器共厂...
原创
334阅读
0评论
0点赞
发布博客于 2 年前

Lua无状态迭代器

无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。每一次迭代,迭代函数调用 状态常量、控制变量两个参数,一个无状态的迭代器只利用这两个值可以获取下一个元素。不啰嗦概念,看代码,来理解:--求数字j到N的平方function square(N, j) if j <= N then ...
原创
524阅读
0评论
1点赞
发布博客于 2 年前

lua中#,getn, maxn获取数组的长度的陷阱

lua获取table长度的接口有很多:table.getn() ’#’操作符 table.maxn()用#和table.getn 等价,它计算的是数组元素长度(不包括hash 键值),返回从1开始连续的最大key(看具体情况)。maxn 不论key是否连续,返回最大的key在规范的数组情况下,三种方式都能正常获取值:t= { 4,5,6,7,8}print("...
原创
1372阅读
1评论
0点赞
发布博客于 2 年前

lua中 pairs 与 ipairs 区别

pairs 与 ipairs 两者的区别如下:--数组这么定义,貌似没差别t= {1,2,3,4,5}for k, v in ipairs(t) do print(v)endprint("--------------------")for k, v in pairs(t) do print(v)end效果看起来一切正常--手动...
原创
155阅读
0评论
0点赞
发布博客于 2 年前

LuaStudio破解版闪退解决方案

安装了LuaStudio破解版的童鞋,是不程序运行3分钟就会自动闪退?什么? 你的破解版不闪退? 那么请在文章下面留下不闪退版下载链接,资源共享,不要吝啬。没事,曲径通幽处,总有办法解决,用个脚本(很通用)自己启动不就行了。。。拷贝以下命令到XXX.bat文件下,执行即可。@ECHO OFF:RESTARTSET num=-1tasklist | find /...
原创
1940阅读
3评论
0点赞
发布博客于 2 年前

在多线程中访问vector

两种情况:1. 不改变vector的元素数量, 则多线程访问无冲突。2. 改变vector的元素数量(比如push_back, erase), 则多线程访问有冲突,需要加锁。#include <iostream> #include <windows.h> #include <vector> #include <string...
原创
2097阅读
0评论
0点赞
发布博客于 2 年前

UGUI Super ScrollView 最新版2.3.2

在unity assetstore 最新付费$39 下载的UGUI Super ScrollView 最新版2.3.2, 奉献给大家享用!
unitypackage
发布资源于 2 年前

./configure --prefix

源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。 执行 ./configure --prefix=/usr/local/supersparrow make make install 将自动生成目录supersparrow,且该软件所有的文件都被复制到这个目录。 使用--prefix的优点:维护方便、卸载软件或移植软件方便。当...
原创
188阅读
0评论
0点赞
发布博客于 2 年前

Linux程序前台后台切换

命令运行时使用CTRL+C,强制终止当前进程命令运行时使用CTRL+Z,强制当前进程转为后台,并使之挂起(暂停).  1. 使进程恢复运行(后台)  (1)使用命令bg  Example:  zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01  *这里使用CTRL+Z,此时serv01是停止状态*  [1]+ Stopped ./tc...
转载
500阅读
0评论
0点赞
发布博客于 2 年前

Linux 软件安装到 /usr,/usr/local/ 还是 /opt 目录?

 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的/usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。/usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。/opt:用户级的程序目录,可以理解为D:/Software,opt...
原创
202阅读
0评论
0点赞
发布博客于 2 年前

ulimit 命令详解

Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux 用户的最大进程数可以用ulimit -a 来显示当前的各种用户进程限制。下面我把某linux用户的最大进程数设为10000个:    ulimit -u 10240    对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,    最好通过使用 ulimit ...
转载
797阅读
2评论
1点赞
发布博客于 2 年前

一分钟教你真正搞明白C++多态

有那么多讲C++多态的文章,但是却没有一个能真正看明白的,神秘的多态机制,究竟是如何实现的?我们先看两个类:class A{public: A() { a = 111; } virtual void fun1() { cout &lt;&lt; " A::fun1" &lt;&lt; endl; } virtual void fun2() { cout ...
原创
123阅读
0评论
0点赞
发布博客于 2 年前

linux和windows下用setsockopt设置SO_SNDTIMEO,SO_RCVTIMEO的参数的一点区别

UDP的socket在某些情况:如对方关闭时,本地可能sendto不出去数据,然后recvfrom就会被阻塞,这时就需要设置 这两个参数的值提高程序质量。linux:    struct timeval timeout={3,0};//3s    int ret=setsockopt(sock_fd,SOL_SOCKET,SO_SNDTIMEO,&amp;timeout,sizeof(tim...
转载
789阅读
0评论
0点赞
发布博客于 2 年前

TcMalloc的介绍以及Windows下安装使用

TcMalloc的介绍以及Windows下安装使用本文由博主(SunboyL)原创,转载请注明出处:http://www.cnblogs.com/xsln/p/Introduction_TcMalloc.html介绍:  TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一个内存管理库,与标准的glibc库中malloc相比,TcMa...
转载
517阅读
0评论
0点赞
发布博客于 2 年前

一个NB的随机算法

在游戏中,大家会经常使用随机算法,但是如何选择一个好的伪随机?这里提供一个思路:这里提供了一个数组,有101个数据 ,分别代表%0 -  100%, base数组中每个元素值 都是该概率的基础值,比如对于10%的概率,base[10]它的基础值为1475 (其实这里都是乘以100000了,它本身应该是0.01475 ),  当第一次check时, 在0- 100000中随机一个值与1475...
原创
129阅读
0评论
0点赞
发布博客于 2 年前

多线程下值的自增方案:_InterlockedIncrement ,atomic_long ,mutex

最近学习多线程下的整数自增,很好理解:场景:  一个点击需求,用10个线程模拟10个用户同时点击,每个线程点击10 0000次, 那么实际上一共是点击100 0000 次。下面分别使用无锁(结果肯定错误), mutex,_InterlockedIncrement, atomic 测试: #include &lt;iostream&gt; #include &lt;string...
原创
916阅读
0评论
0点赞
发布博客于 2 年前

Redis学习手册

为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三。其一,Redis不仅性能高效,而且完全免费。其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧。最后就是上手容易,操作简单。记得在刚刚接触Redis的时候,由于当时项目的工期相当紧张,留给我们做出选择的空间也是非常有限,一旦技术决策失误,造成的后果也比较严重。所以在做出决定之前,我不仅快速的...
转载
124阅读
0评论
0点赞
发布博客于 2 年前

我读过的最好的epoll讲解--转自”知乎“

   首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。     不管是文件,还是套接字,还是管道,我们都可以把他们看作流。     之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket...
转载
117阅读
0评论
0点赞
发布博客于 3 年前

我读过的最好的epoll讲解--转自”知乎“

   首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。     不管是文件,还是套接字,还是管道,我们都可以把他们看作流。     之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket...
转载
117阅读
0评论
0点赞
发布博客于 3 年前

Linux 下强大的Vim插件 vimplus

最近在Linux下开发,发现有一款极其强大的插件,附上github介绍地址:https://github.com/chxuan/vimplus里面安装方法都有,最后成功的界面:
原创
1354阅读
0评论
1点赞
发布博客于 3 年前

C++ 静态成员对象的定义陷阱

我们先来看一段代码,展示一个奇怪的地方: #include &lt;iostream&gt;using namespace std; class A{public: A() { cout &lt;&lt; "A's Constructor Called " &lt;&lt; endl; } int a;};class B{ public: B() { co...
原创
951阅读
0评论
0点赞
发布博客于 3 年前

C++实现反射(利用字符串创建对象)

JAVA,C# 中都具有反射机制,但是C++没有语法支持,但是可以自己实现,来通过字符串产生对象,其实仅仅是个语法糖而已实现思路: ClassFactory类的一个map 存储  key 相应的类名 和  value 创建该类对象的函数地址 ,  ClassFactory类提供CreateObjectByName方法创建该类的对象:这个方法的本质就是调用map中存储的函数地址来调用对应得的...
原创
1549阅读
1评论
1点赞
发布博客于 3 年前

一个简单高精度定时器设计

下面设计了一个轻量的高精度定时器类,主要使用timeGetTime()函数: DWORD timeGetTime(VOID);返回系统时间,以毫秒为单位。系统时间是从系统启动到调用函数时所经过的毫秒数。注意,这个值是32位的,会在0到2^32之间循环,约49.71天。 代码设计非常简单,需要配合一个while(true)循环来使用, 这个循环你当然可以放到一个线程中:#in...
原创
540阅读
0评论
0点赞
发布博客于 3 年前

对于vector中高效删除中间元素的技巧

众所周知,vector是连续存储空间,只提供高效的尾部删除方法pop_back() ,在中间删除的效率很低,那么如果大家想快速删除中间元素该如何实现?话不多说,看代码://移除vector元素,最后一个填充。template<typename T>inline void ListRemoveAt(vector<T>&list, size_t id...
原创
2519阅读
4评论
2点赞
发布博客于 3 年前

sizeof(*this) 在虚函数中的使用误区

不要以为基类使用了虚函数 GetSize()   ,sizeof(*this)并不能正常返回派生类的大小, 并且使用了virtual 后,有虚函数表,导致容量+4!!!#include &lt;iostream&gt; #pragma pack(1)struct A{ char a; virtual int GetSize() { return sizeof(...
原创
284阅读
0评论
0点赞
发布博客于 3 年前

设计一个40位的数据类型,用于标记多种状态

我们知道,unsigned  char 是8位,可以存储数据的值是 0-255    , 一共256个值。下面可以自己设计一种数据结构,用于存储40位的数据类型,当然这里的40 (8 *5 )你可以随意扩展,比如 256位 = 8 *32话不多说,看下面的示例代码:#include &lt;iostream&gt;typedef unsigned char BYTE...
原创
479阅读
0评论
0点赞
发布博客于 3 年前

根据 关键字 搜索 sqlserver存储过程

SQL SERVER  非常好用的根据某个关键字查存储过程:select *  from sys.all_sql_modules   where definition like '%wxface%'或者 SELECT DISTINCT o.name AS Object_Name, o.type_desc FROM sys.sql_modules m...
原创
877阅读
0评论
0点赞
发布博客于 3 年前

一种数据映射方式,初级加密

一种数据映射方式,自动生成对应表,可以用于初级加密。#include &lt;stdio.h&gt; #include &lt;algorithm&gt;#include &lt;ctime&gt;using namespace std; void Print(unsigned char *p,int N){ for (int i = 1; i &lt;= N; ++i)...
原创
507阅读
0评论
0点赞
发布博客于 3 年前

一种加密,解密的思路

加密的一种思路:1.  客户端有个初始key,这个key先加密(异或)4个字节内容,生成4个字节的密文2.  根据4个字节的密文,算法产生新key2, 使用key2解密下一段 4个字节的内容, 以此类推 对应的解密:1. 服务器本身知道初始key 2. 服务器先根据4个字节的密文,使用客户端相同的算法产生key2  3. 使用key 解密第一段4个字节4.以此类推,...
原创
431阅读
0评论
0点赞
发布博客于 3 年前

位运算的妙用技巧

C/C++语言提供的位运算符有: 运算符 含义 功能 &amp; 按位与 两个二进制位都为1,则该位的结果值为1;否则为0。 | 按位或 两个二进制位中只要有一个为1,该位的结果值为1。 ∧ 按位异或 两个二进制位不同则结果为1(真),相同则结果为0(假) ~ 取反 一个二进制数按位取反,即将0变1,将1变0。 ...
原创
1692阅读
0评论
2点赞
发布博客于 3 年前

进程虚拟地址为什么是4G大小?

1、创建一个进程时,操作系统会为该进程分配一个 4GB 大小的虚拟 进程地址空间。 之所以是 4GB ,是因为在 32 位的操作系统中,一个指针长度是 4 字节  (32位), 2的32次 方个地址寻址能力是从 0x00000000~0xFFFFFFFF 即为 4GB 大小的容量。   4G 指的是最大的寻址空间为4G一个进程用到的虚拟地址是由内存区域表来管理的,实际用不了4G。而用...
原创
3227阅读
0评论
3点赞
发布博客于 3 年前

掌握C语言链表-黄强-专题视频课程

链表是一种使用极其广泛的数据结构,它也可以用来作为实现栈、队列等数据结构的基础,链表没有像数组需要预先知道数据大小的缺点,可充分利用计算机内存,实现动态灵活的内存管理。除非需要频繁的通过下标来随机访问各个数据,否则数组都可以用链表代替。链表作为C语言数据结构的难点,更是面试中必考的知识点。...
原创
307阅读
0评论
0点赞
发布博客于 3 年前

axftmp1.h头文件

axftmp1.h是收集类模板(MFC模板类)的头文件,倘若你在程序中用到了CArray, CObList等数据结构时,那么就得加载该文件。通常在MFC编程中,为了使用集合、数组类,要在StdAfx.h中加入下面语句:#include &lt;afxtempl.h&gt; 代码简要说明: CArray &lt;CPoint,CPoint&amp;&gt; m_Array;  该语句定义...
原创
163阅读
0评论
0点赞
发布博客于 3 年前

directx7.0sdk完整SDK,亲测可用

directx7.0sdk完整SDK,亲测可用,用于游戏项目,已经成功与VC6.0调试通过!
rar
发布资源于 3 年前

C++循环输出M * N 的螺旋矩阵

什么是螺旋矩阵?螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。 如图11  *   7的螺旋矩阵 如图11  * 11的螺旋矩阵  话不多说,上代码:#include &lt;iostream&gt;#include &lt;iomanip&gt;using namespace ...
原创
5105阅读
2评论
5点赞
发布博客于 3 年前

C++ STL标准模板库-优秀的C++标准库-黄强-专题视频课程

STL是Standard Template Library的简称,中文名标准模板库,是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室开发的 ,是一个具有工业强度的,高效的C++库,STL早已是ANSI/ISO C++标准中的一部分。STL库由于其对跨平台,对标准C++的支持,开源,高效等优点,如今已经被广泛运用于企业级开发。...
原创
424阅读
0评论
0点赞
发布博客于 3 年前

C++类的内存结构剖析

C++类的内存结构是数据成员依次占据的空间(考虑对齐):#include &lt;stdio.h&gt; class A {private: int a; char b; double c;public: void print() { printf("%d, %c, %f
", a ,b ,c); }}; int main(){ A ...
原创
404阅读
0评论
0点赞
发布博客于 3 年前

new操作符 与 operator new()

我们经常new一个对象 :class A{public: A( ) { cout &lt;&lt;"无参构造"&lt;&lt; endl; } A(int a) { this-&gt;a = a; cout &lt;&lt; "有参构造" &lt;&lt; a &lt;&lt; endl; } ~A() { cout &lt;&lt; &
原创
226阅读
0评论
0点赞
发布博客于 3 年前

Windows NT 架构

两张图了解NT架构: 用户态            核心态  
原创
848阅读
0评论
0点赞
发布博客于 3 年前

unity执行顺序

一张图说明一切系列。。。   
原创
538阅读
0评论
0点赞
发布博客于 3 年前

Unity3D Time.deltaTime 增量时间

Unity3D中的  void  Update()函数中的代码是以帧来执行的,假设1秒有60帧,则1秒钟你的Update执行60次,写法一中,你的物体将在1秒内移动  60帧 * 10米 =  600米。void Update () {  //写法一: 每帧移动物体10米    float translation= 10;    transform.Translate (0, 0...
原创
1318阅读
0评论
2点赞
发布博客于 3 年前

TCP send函数会阻塞吗?

很多学员在使用send函数的时候,发现send总是能正常返回,看起来好像是“非阻塞”,其实它是阻塞的,以下代码为证:服务端: #include &lt;stdio.h&gt;#include &lt;winsock2.h&gt; #pragma comment(lib, "ws2_32.lib") int main(){ WORD wVersionRequested...
原创
3172阅读
0评论
1点赞
发布博客于 3 年前

关键字explicit不允许构造函数隐式转换

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。少罗嗦,看代码:class A{public: A(int a) { } };class B{ explicit B(int b)//不允许int转为 A的对象 { }};int main(){ A...
原创
410阅读
0评论
0点赞
发布博客于 3 年前

typename关键字

深刻理解关键字typename用来标识是一个类型,详情见下面的例子typename   T::MyType     m_c;   这里的typename表示T::MyType是一种类型,而不是某类的静态成员变量!!!class A{public: typedef int MyType; // 使用typedef关键字定义了内部类型};class B{public: cl...
原创
629阅读
0评论
0点赞
发布博客于 3 年前

利用模板偏特化判断类型是否是指针

利用模板判断类型是否是指针 :#include&lt;iostream&gt;using namespace std; template &lt;typename T&gt;struct TraitsHelper { static const bool isPointer = false; };template &lt;typename T&gt;struct Trait...
原创
745阅读
0评论
0点赞
发布博客于 3 年前

C++ Boost库编程-黄强-专题视频课程

Boost库是一个优秀的、可移植、开源的C++库, 它由C++标准委员会库工作组成员发起,其中有些内容经常成为下一代C++标准库的内容,在C++社区中影响甚大,是不折不扣的“准”标准库。Boost库由于其对跨平台,对标准C++的支持,开源,高效等优点,如今已经被广泛运用于企业级开发。...
原创
879阅读
0评论
0点赞
发布博客于 3 年前

30分钟学会Visual Studio 2017-黄强-专题视频课程

Microsoft Visual Studio(简称VS)是目前Windows平台流行的应用程序的集成开发环境(IDE)。VS由美国微软公司(Microsoft )的开发,新版本为 Visual Studio 2017 版本 , 支持C,C++,C#,VB,F#,Python,JavaScript等语言的开发,功能十分强大!...
原创
1440阅读
0评论
2点赞
发布博客于 3 年前

SQLServer版本对应内部数据库版本号

查询SQLServer对应的内部数据库版本号select DATABASEPROPERTYEX('master','version') SQLServer版本对应内部数据库版本号配置表源SQL Server版本内部数据库版本SQL Server 2016852SQL Server 2014782SQL Server 2012706SQL Server 2008 R2665SQL Server 20...
转载
3759阅读
0评论
0点赞
发布博客于 3 年前

wprintf 中使用%I64d格式化输出LONGLONG

LONGLONGLONGLONG其实就是int64类型。在winnt.h可以看到:typedef __int64 LONGLONG;所以要想输出就要看__int64使用什么格式符了。通过查MSDN中,发现是:I64。在格式化输出则还需要结合一个d,即%I64d。对于无符号的ULONGLONG,则是%I64u。 如果你使用%d    或者   %l   ,来输出连续的两个 LONGLONG,类型, ...
原创
476阅读
0评论
0点赞
发布博客于 3 年前

delete void* 释放内存问题

直接看代码:#include using namespace std;class  A{public:A(int a1 ,double  b1) :a(a1) , b(b1) {}~A() { cout int  a; double b;};  int main(){   A  *p = new A(100
原创
350阅读
0评论
0点赞
发布博客于 3 年前

精通Win32 API编程-Windows图形界面编程-黄强-专题视频课程

Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!...
原创
1626阅读
0评论
0点赞
发布博客于 3 年前

windows的用户模式和内核模式

用户模式和内核模式运行 Windows 的计算机中的处理器有两个不同模式:“用户模式”和“内核模式”。根据处理器上运行的代码的类型,处理器在两个模式之间切换。应用程序在用户模式下运行,核心操作系统组件在内核模式下运行。多个驱动程序在内核模式下运行时,某些驱动程序可能在用户模式下运行。当启动用户模式的应用程序时,Windows 会为该应用程序创建“进程”。进程为应用程序提供专用的“虚拟地址空间”和专...
原创
265阅读
0评论
0点赞
发布博客于 3 年前