自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mick_seu的博客

Stay Hungry, Stay Foolish

  • 博客(136)
  • 收藏
  • 关注

原创 【懒人笔记】Web前端开发库

项目需要一个页面展示,于是我冒充了2个月的 Web前端,这里记录下用到的相关工具和库。 Web框架 用的是 Django,不得不说,对于我这样的前端小白来说,上手容易很多。也让我进一步了解到 Python 的强大。 工具 用途 说明 django web框架 前端小白快速上手,功能强大,为了和 django-celery搭配,最好使用 ver 1.11...

2018-05-10 11:28:10 533

原创 Python 面向对象【初级篇】

文章参考: Python 面向对象(初级篇) python 面向对象(进阶篇)Python 是一门面向对象的语言。本文是面向对象编程的初级篇,仅介绍封装,不涉及继承和多态。鉴于C++也是一门面向对象的语言,里面有很多相通之处。 类的成员类的成员可以分为三大类:变量、方法 和 属性 变量普通变量属于对象静态变量属于类,即不管实例化了多少个对象,静态变量只有一份class stud

2018-04-28 10:37:38 441

原创 【懒人笔记】我的editorconfig配置

Editorconfig 是一套用于统一代码格式的解决方案,适用于多平台,多软件。官网传送门:Editorconfigeditorconfig 的配置非常容易,只需在你的工作根目录下新建一个 .editorconfig 文件:root = true[*]charset = utf-8end_of_line = lf[**.{h,cc,cxx,cpp,proto,lua}]...

2018-04-27 10:40:21 2245

原创 Python 内置函数(持续更新) 及 lambda表达式

Python 有很多内置函数,灵活使用可以帮到大忙。本文目前收录:slice()set()round()map()zip()filter()reduce()(非内置,属于 functools 库)sorted()值得注意的是: Python3 以后, map()、zip()、filter() 返回对象不再是 列表 ,而是 迭代器 。 迭代器 是 Python 中很重要的...

2018-04-24 18:49:26 1271

原创 Python time模块

time 是 Python 里常用的时间模块。本文给出 时间戳、struct_time(时间元组)以及 时间字符串 三者之间的转换关系,便于查阅。含义时间戳:自从1970年1月1日午夜(历元)经过多长时间。时间元组:内含9个数据的元组。 属性 值 tm_year 2018 tm_mon 1-12 tm_mday 1-31...

2018-03-12 15:35:39 269

原创 【Perforce】使用命令行修改changelist的Description

当前项目使用Perforce控制版本。我们可以使用 p4 change changelist# 打开一个 changelist 的相关描述,可以通过修改 Description 字段来进行修改。可是在自动化中,该方法并不合适,好在 P4 提供了 p4 change -o 以及 p4 change -i 两个指令。p4 change The -o flag writes the ch...

2018-02-23 11:55:20 4611 3

原创 【C/C++】C++11初探多线程

首先推荐一个博客:C++11 并发指南系列(256code)本系列很多参考该专栏之前在Linux下,一直使用 Pthread 使用多线程变成。C++11 新标准中引入了五个头文件来支持多线程编程,他们分别是 , , ,  和 。这样,你就可以在语言层面编写多线程程序了,直接的好处就是代码的可移植性得到了提高。:该头文主要声明了两个类,

2018-01-26 11:14:49 316

原创 【懒人笔记】我的VIM配置

colorscheme peachpuffset rulerset numberset tabstop=4set hlsearchset incsearchsyn on" set list" set listchars=tab:..,trail:.set showmatchset smartindentset shiftwidth=4set autoindentset

2018-01-25 18:47:54 287

原创 【C/C++】Boost库初学

Boost库初次使用,C++11里很多新特性都来自Boost库。我的Boost库安装参考:http://blog.csdn.net/this_capslock/article/details/47170313#include #include #include #include #include using namespace std;volatile bool is

2017-12-13 10:36:51 1136

原创 【C/C++】C++11新特性:std::bind

相关知识参考:C++11 新特性:Lambda 表达式(豆子)std::function(碎语心弦)c++11 function、bind用法详解(猿码先生)std::bind可以根据当前已有的可调用对象,构造出一个新的可调用对象,有了bind,我们可以实现“动态生成新的函数”的功能。#include #include #include typedef st

2017-12-11 12:20:14 505

原创 【C/C++】C++11新特性:初探右值引用与转移语义

参考自:右值引用与转移语义(李胜利)C++11之前,右值是不能被引用的,最大限度就是用常量引用绑定一个右值,如 :const int& a = 1;为了与左值引用区分,右值引用 && 表示。如下:#include void fun(int& i) { std::cout << "lvalue:" << i << std::endl;}void fun(int

2017-12-11 10:54:54 495

原创 【C/C++】C++11新特性:=default 和 =delete

参考自:微软文档显式默认设置的函数和已删除的函数C++11 标准新特性:Defaulted 和 Deleted 函数C++11 中值得关注的几大变化(详解)C++11以前,我们习惯将拷贝构造函数和拷贝赋值函数设置为 private 来禁止类的拷贝行为。class noncopyable { public: noncopyable() {};

2017-12-08 11:48:12 1831

原创 【C/C++】模板类

记录一个以前没见过的模板使用方法,以后再扩展。#include template class Derived : public T { public: Derived() { std::cout << "Derived()" << std::endl; } ~Derived() { std::cout << "~Derived()" << std::endl; }};

2017-12-06 22:14:00 386

转载 【C/C++】重载(overload),重写(override,或覆盖),隐藏

转自:C++中的重载、重写(覆盖)、隐藏(Karen_Lh)一、重载 (1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。二、重写 覆盖是指派生类函数覆盖基类函数(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;

2017-12-06 10:40:54 450

原创 【C/C++】智能指针auto_ptr,share_ptr,unique_ptr

《Effective C++》中提到,为了避免内存泄露,我们需要使用RAII(Resource Acquisition Is Initalization, "资源获得时机便是初始化时机"),即“以对象管理资源”,充分利用对象在离开其作用域时,析构函数将会被自动调用,在析构函数中释放其管理的资源。注:如果在资源释放的过程中导致抛出异常,事情就变得有点棘手,我们需要借用《Effective C++

2017-12-05 22:06:41 424

原创 【C/C++】嵌套类

参考自:C++ 与“类”有关的注意事项总结(六):嵌套类与局部类(漫步云端)类还可以定义在另一个类的内部。我们称之为 “嵌套类”。嵌套类的目的:因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,同时对外隐藏该底层实现。几个注意点:1、从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类外使用该类名时,需要加外

2017-12-05 14:32:32 894

原创 【C/C++】返回值与左值

关于左值右值的定义,感觉好烦的样子,这里我们仅仅探讨返回值与左值的关系。参考自:函数返回值作为左值问题(sunshinewave)左值,简单来说就是可以放在等号左边被赋值。为了更好讨论这个问题,我们首先将函数返回值分为C++内置类型与自定义类型。对于内置类型,当返回值为值传递时,返回值实际是临时变量,不能作为左值,要想做左值,只能是返回引用。如下:// 值传

2017-12-03 15:12:07 2502

原创 【python】理解python里的赋值、引用、拷贝及作用域、内存管理、垃圾回收

项目刚刚开始,师傅让我写一些工具,于是开始接触python,十分好用的脚本。于是我用着用C++的用法用python,出现了不少问题,这里以新手的角度理解下python里的赋值,引用,拷贝以及作用域。参考自:python基础(5):深入理解 python 中的赋值、引用、拷贝、作用域(xrzs)Python的函数参数传递:传值?引用?(winterTTr Blog)1

2017-11-22 22:26:41 4034

原创 【C/C++】C++内存管理

内存管理一直是C++的一个难题,这里我借助几篇博文好好“预习”一下。C/C++内存管理详解(ShinChan's Blog)内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理](I come, I see, I conquer)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区(盗草人)C的内存分为:1)栈

2017-11-13 21:34:06 338

转载 【C/C++】constexpr和常量表达式

以下内容来自《C++ Primer(第五版)》常量表达式是指值不会改变并且在编译过程就能够得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的 const 对象也是常量表达式。如下:const int max_num = 20; // max_num是常量表达式const int limit = max_num + 1; //

2017-11-12 18:17:39 4052 1

原创 【多线程编程】线程私有数据(TSD)

Thread Specific Data(TSD)线程存储,有什么用呢?现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。相关函数:int pthread_key_create(pthread_key_t *

2017-10-14 16:11:50 1433

原创 【Skynet】Socket源码剖析二

socket_server 层使用简单封装后的 epoll ,向上提供一些列 socket_server_*** 的API。skynet_socket封装:为了进一步适用于Skynet框架,又进行一步对socket_server进行了封装,所有常用的接口都封装在skynet_socket.c 。相比 socket_server.c 的1600多行代码,skynet_socket.c 则只有200多...

2017-10-10 22:56:45 838

原创 【Skynet】Socket源码剖析一

参考了:Skynet服务器框架(六) Socket服务源码剖析和应用(linshuhe1的专栏)以及Skynet 源码学习 -- Socket Server 和 Skynet_socket(cchd0001的专栏)用了Skynet下的Socket接口后,越发想看看它的底层实现。和我之前想的一样,Skynet底层的网络并发在Linux下使用的正是 epoll。./skynet-s

2017-10-10 09:46:28 1272

原创 【Socket编程】非阻塞connect

阅读Skynet源码的过程中,发现一种非阻塞connect方式。以前不知道,这次好好学习一下。文章参考自:非阻塞connect编写方法介绍(董的博客)TCP连接的建立涉及到一个三次握手的过程,鉴于RTT波动范围很大,从局域网的几个毫秒到几百个毫秒甚至广域网上的几秒。这段时间内,我们可以执行其他处理工作,以便做到并行。因此,非阻塞connect可以为我所用。1、fcn

2017-09-28 15:06:13 1099

原创 【Skynet】C头文件不要定义函数?

参考自:函数实现不放在头文件的原因,及何时可以放头文件的情况(绿色冰点)对于C/C++我们很早就被告知不要在头文件里定义函数,这样不好。今天学习Skynet时,发现里面有很多函数都定义在头文件里?很是疑问,于是有了这篇文章。把函数定义在头文件有哪些主要缺点?1、不利于代码理解和维护:通常,头文件被用来唯一指定接口,且多少提供一些文档来说明如何使用在该文件中声明的组件

2017-09-25 15:57:24 4062 1

原创 【Lua】Lua与C交互

上一篇文章简单介绍了在Lua中如何调用C,其中的原理还是需要稍微深究一下。文章参考自:Lua和C交互的简易教程(HansChen的博客)C/C++与Lua交互的基础源于虚拟栈。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶一个简单的例子:#include #includ

2017-09-25 10:03:22 1806

原创 【TCP】TCP拥塞控制小记

相比UDP,TCP有拥塞控制。《计算机网络》这本书以Tahoe与Reno为例介绍了TCP的拥塞控制。1、慢启动和拥塞避免是必须的。这两点不同之处在于拥塞窗口 cwnd 增速不同。慢启动以指数增长,拥塞避免则以线性增长。2、拥塞丢包的判断主要两种方式:1)发送发超时;2)发送方收到3次冗余ACK3、与Tahoe相比,Reno还具有快速恢复。对与以上两种丢包,Tahoe都将慢启动阈

2017-09-24 16:16:58 425

原创 【Lua】Lua调用C动态库

lua 好归好,但有很多对效率要求较高的服务,还得让C来完成。本篇学习下Lua如何调用C。最重要的部分:定义一个 luaopen_* 函数,并调用 luaL_openlib 函数int luaopen_mylib(lua_State *L){ luaL_Reg l[] = { {"test1",test1}, # key-val,相

2017-09-22 17:16:18 2671

原创 【Skynet】socket与多服务

回顾之前服务器端的TCP连接:socket.listen(address, port) 监听一个端口,返回一个 id ,供 start 使用。socket.start(id , accept) accept 是一个函数。每当一个监听的 id 对应的 socket 上有连接接入的时候,都会调用 accept 函数。这个函数会得到接入连接的 id 以及 ip 地址。你可以做后续操作。

2017-09-21 21:13:25 1679

原创 【Skynet】Sproto初学与应用

参考自:Skynet基础入门例子详解(5)(魔王魂影)Sproto是云风专门为Skynet开发的轻量协议。借鉴官方例子,我们可以在 ./examples/proto.lua 中添加自己的一个 “say” 协议local sprotoparser = require "sprotoparser"local proto = {}proto.c2s = sprotopar

2017-09-20 21:54:08 3824

转载 【Socket编程】Tcp连接中accept生成新socket与监听socket的区别

参考自:socket的accept函数解析以及服务器和多个客户端的端口问题(L未若的博客)新建立的连接使用的端口号是否和listen所用端口号相同呢?如果认为是会分配新的端口,就大错特错了。因为:1、现在使用多路IO复用epoll等,配置好点的服务器可以支持数十万个并发连接,而端口号只有16位,最多才65535,且加上一些常用的端口号不能使用,可用的端口号都没那么多。2、现

2017-09-20 11:03:56 5195

原创 【Skynet】文件传输升级版

上一个socket文件传输过于简单,师傅让我进一步改进,定义包结构,让文件的传输过程更加自由。该实现可以参考./examples/client.lua ,这里面有数据的打包与解包。这里我设计了一个简易的报文结构。Length:即Type+Content的长度。Type:将报文分成两种,一种为信息报文,包含文件名及文件大小,以字符串"01"表示,一种为数据报文,以字符串"

2017-09-19 14:33:39 721

原创 【Skynet】使用skynet在服务器与客户端间传输文件

这是一个简单的文件传输例子,使用了skynet封装的socket接口。熟悉一个框架最好的方法就是用它。skynet有一个“服务(service)”的概念,每个服务类似与一个模块,完成特定的任务,启动一个服务可以使用 newservice() 或 uniqueservice()。首先是客户端:package.cpath = "luaclib/?.so"package.path

2017-09-18 10:27:05 1976

原创 【Socket编程】Python用udp实现简易ping

用Python实现一个简易的ping程序,客户端发送一个简易的ping报文,接收到该信息的服务器返回对应的pong报文,然后客户端计算RTT。由于UDP不是可靠协议,需要为该程序设置超时机制,超时1秒后将假设报文没有收到,并打印出超时提示。服务器实现如下:import socketimport errnoimport osHOST, PORT = "", 8888def

2017-09-17 15:28:48 5685

原创 【Socket编程】Python实现简易Web服务器

利用Python,我们可以搭建一个简单的Web服务器,这里我参考了:https://ruslanspivak.com/lsbaws-part1/

2017-09-10 18:19:56 6749 5

原创 【Socket编程】篇七之Python实现Socket

一年前使用过C来实现Socket,如今见识了脚本的便利之后,我来尝试用Python再次实现一遍。UDP:客户端:import socketserverName = "127.0.0.1"serverPort = 12000clientSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)message = ra

2017-09-10 16:45:14 871

原创 【Lua】初探协程

类似于线程,协程拥有自己独立的栈、局部变量和指令指针。多个协程共享全局变量和其它大部分东西。线程与协程的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协程却需要彼此协作的运行。就是说,一个具有多个协程的程序在任意时刻只能运行一个协程,并且正在运行的协程只会在其显式地要求挂起时,它的执行才会暂停。Lua将所有关于协程的函数放置在一个名为“coroutine”的table中。

2017-09-08 14:20:01 469

原创 【Lua】面向对象

Lua使用table来面向对象。一个简单的 Account 类:Account = {balance = 0}function Account.sub(self, v) self.balance = self.balance - venda = Accounta.sub(a, 10)

2017-09-06 09:43:44 334

原创 【Lua】“诡异”的return

类似其他语言,Lua也有return关键字,但需要注意其用法。因为它只能用在block结束的地方, 不能用在block的一个中间部分。想要使用 return 提前返回的童鞋注意了!例子:function fun() i = 1 return i i = 2endfun()结果报错:lua: a.lua:4: 'end' expected (to close 'f

2017-09-05 17:10:23 5572 3

原创 【Lua】元表初学

metatable,Lua中的元表,是Lua中重要的内容。参考自:Lua中的元表与元方法(果冻想)在Lua代码中,只能设置table的元表。若要设置其它类型的值的元表,则必须通过C代码来完成。还存在一个特例,对于字符串,标准的字符串程序库为所有的字符串都设置了一个元表,而其它类型在默认情况下都没有元表。下面用一个简单的例子初探元表:__add元方法:

2017-09-05 16:04:33 353

空空如也

空空如也

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

TA关注的人

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