午饭要阳光
码龄9年
关注
提问 私信
  • 博客:769,832
    社区:42
    769,874
    总访问量
  • 283
    原创
  • 1,442,009
    排名
  • 736
    粉丝
  • 2
    铁粉

个人简介:热爱编程

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2016-03-10
博客简介:

Sunnylunch-blog

博客描述:
介绍c/c++基础知识,介绍一些项目。
查看详细资料
个人成就
  • 获得1,015次点赞
  • 内容获得152次评论
  • 获得912次收藏
  • 代码片获得171次分享
创作历程
  • 90篇
    2017年
  • 193篇
    2016年
成就勋章
TA的专栏
  • c/c++基础
    210篇
  • linux点滴
    62篇
  • 知识框图总结
    5篇
  • linux
    56篇
  • 数据结构
    59篇
  • C++
    35篇
  • C
    43篇
  • 网络
    28篇
  • 项目
    24篇
  • mysql
    4篇
  • 刷题
    42篇
  • python爬虫
    1篇
  • 设计模式
    2篇
  • lua学习
    7篇
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

lua学习笔记——文件I/O

1、lua中的文件I/O lua的文件I/O有两种模式,分别是简单模式和完全模式,他们的区别如下: 简单模式:只有一个默认输入文件和一个默认输出文件,并且提供对这些文件的操作。 完全模式:使用外部的文件句柄来实现。它以一种面向对象的形式,将所有文件操作定义为文件句柄的方法。完全模式可以同时对多个文件进行操作。2、打开和关闭文件 打开文件:file=io.open(filename,
原创
发布博客 2017.11.19 ·
1930 阅读 ·
2 点赞 ·
1 评论 ·
4 收藏

lua学习笔记——coroutine

1、什么是协同程序 Lua中的协同程序(coroutine)与线程比较类似,拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其他大部分东西。 协同程序与线程的区别: 线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。在任一指定时刻只有一个协同程序在运行,并且在这个正在运行的协同程序只有在明
原创
发布博客 2017.11.15 ·
983 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

lua学习笔记——元表(Metatable)

1、什么是元表 table是lua中一个重要的数据结构,我们可以访问table内的值,但是却无法对两个table进行操作。因此lua提供了元表(Metatable),允许我们改变table的行为,每个行为关联了对应的元方法。 元表就类似于C++中的运算符重载,可以对类对象进行操作,当然元表的功能更强大一些。有两个很重要的函数来处理元表: setmetatable(table,m
原创
发布博客 2017.11.07 ·
1738 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

lua学习笔记—table

1、什么是table table是lua的一种数据结构,可以用来创建数组或映射。lua中的table使用的是关联型数组。关联数组的key值可以是除过nil之外任意类型的值。table的大小是不固定的,可以自己进行扩容。2、如何构造table 可以使用”{}”来构造一个空表,还可以在构造的同时进行初始化。 例1:用table创建数组,在lua中数组下标默认从1开始 结果
原创
发布博客 2017.10.28 ·
1372 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

lua学习笔记(1)

一、table Table=数组+映射 在lua中,table是数组和映射为一体的数据类型,table既可以当做数组使用,也可以当做映射来使用。1、声明一个table类型 用花括弧{}来声明一个table 例:a={}2、table的赋值 table可以在定义的时候直接赋值,例: a={1,2,3,} 也可以单独赋值,但是注意table的下标必须是连续的,且从1开始,没有赋值
原创
发布博客 2017.10.27 ·
1375 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

lua中的闭包

1、在了解lua中的闭包之前,我们先来看一个栗子!!! 在上述例子当中,我们用lua的闭包实现了一个计数器。如果之前没有了解过闭包的概念的话,你一定会对上述代码的结果感到奇怪,下面我们就来详细的解释一下闭包。2、第一类值(First class value ) lua中的函数就是所谓的”第一类值”。 在lua中定义一个函数就像创建普通类型值一样,lua中的函数就是一个值,它可以被存放在变量
原创
发布博客 2017.10.19 ·
1578 阅读 ·
3 点赞 ·
2 评论 ·
3 收藏

require和dofile的区别

1在lua中require和dofile都是用来加载和执行模块的,那么他们有什么不同呢???差异: 在加载一个.lua文件的时候,require会先在package.loaded中查找此模块是否存在,如果存在则直接返回模块,如果不存在,则加载此模块。 dofile会对读入的模块编译执行,每调用dofile一次,都会重新编译执行一次。 require它的参数只是文件名,而dofi
原创
发布博客 2017.10.18 ·
5360 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

session和cookie学习

1、什么是cookie和session http协议是一种无状态的协议,浏览器对服务器的每一次请求都是独立的。为了使得web能够产生一些动态信息,就需要保存”状态”,而cookie和session机制就是为了解决http协议无状态而产生。cookie是一种在客户端保存状态的方案,session是一种在服务器端保存状态的方案。2、cookie和session的区别 我们举个栗子来描
原创
发布博客 2017.08.03 ·
1066 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

跳表分析与实现

一、什么是跳表 跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。 在对有序顺序表进行搜索时,使用二分查找时间复杂度是O(logn),但是有序顺序表的插入和删除却是O(n)的算法。 在对有序链表进行搜索时,时间复
原创
发布博客 2017.07.11 ·
6774 阅读 ·
4 点赞 ·
0 评论 ·
21 收藏

剖析tinyhttpd服务器

tinyhttpd是一个小型的http服务器,虽然小但是功能也多,剖析tinyhttpd有助于理解http服务器的工作流程,加深对web服务器的认识。 一、原理图 二、源码剖析 下面是tinyhttpd的源码,自己对它进行了剖析,并对绝大多数内容加上了注释。#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#in
原创
发布博客 2017.07.07 ·
1230 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

STL之set相关算法

STL一共提供了四种set相关的算法,分别是并集(union),交集(intersection),差集(difference),和对称差集(symmetric difference)。 STL的这四个算法所接受的set必须是有序区间,元素可以重复出现。即他们只能接受set/multiset容器作为输入区间。 1、set_unoin(求并集) 算法set_union可构造两个S1,S2这
原创
发布博客 2017.07.06 ·
1429 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

工厂模式

工厂模式大致可以分为三类: 1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式。 这三种模式逐步抽象,并且更具有一般性。 工厂模式有一种非常形象的描述,建立对象的类就像一个工厂,而需要被建立的对象就是一个个产品,在工厂中加工产品,使用产品的人不用关心产品是如何生产出来的。在软件中使用工厂模式的好处就是降低了模块之间的耦合。一、简单工厂模式: 简单工厂模式是工厂模式中最简单的一种
原创
发布博客 2017.06.12 ·
1484 阅读 ·
4 点赞 ·
0 评论 ·
4 收藏

单例模式

一、什么是单例模式 有时候我们会遇到这样一种情况,一个类只能有一个对象被实例化,这时我们就可以使用单例模式了。 单例模式通过类本身来管理其唯一实例。在设计这个类的时候,让他只能创建一个实例并提供对此实例的全局访问。因此单例模式有两个最基本的条件是,确保一个类只有一个实例被创建,提供一个对实例的全局访问指针。二、常见的单例模式实现 常用的单例模式实现方法有两种,饿汉式和懒汉式。懒
原创
发布博客 2017.06.11 ·
971 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

ftp服务器实现

在模拟实现FTP服务器之前,我们先来了解一下有关FTP的功能以及工作原理。一、什么是FTP ftp(File Transfer Protocol)文件传输协议。ftp是应用层协议,基于C/S结构,底层使用TCP/IP协议来保证可靠性。 ftp使得主机间可以共享文件,简单来说就是可以在两台计算机之间来回拷贝文件。 ftp服务的基本过程就是:建立连接、传输数据与释放连接。由
原创
发布博客 2017.06.09 ·
10648 阅读 ·
23 点赞 ·
4 评论 ·
128 收藏

LRU缓存策略设计

一、什么是LRU缓存策略 LRU(Least Recently Used)近期最少使用算法。它的原理就是,缓存一定量的数据,当缓存数量超过设置的阈值时就删除一部分旧的数据。 那么我们怎样判定旧数据呢???根据局部性原理,距离当前最久没有被访问过的数据应该被淘汰。二、LRU缓存策略实现原理 1、使用双向链表记录数据的被使用的时间 因为我们要删除最久没有被访问的数据
原创
发布博客 2017.06.02 ·
1871 阅读 ·
4 点赞 ·
2 评论 ·
9 收藏

大数运算

一、为什么要有大数运算 在C/C++编程语言中,整型的最大存储类型是long long类型,大小是8个字节,一但超出这个范围,则就无法用编程语言的内置类型存储。因为编程语言的存储范围有限,所以它不能满足较大规模的高精度的计算,于是就产生了大数运算这种方法。二、大数运算原理 由于内置类型的存储范围有限,所以我们可以将大数转换成字符串存储在数组里面,然后再对每一位做单独的加减乘除运
原创
发布博客 2017.05.31 ·
1824 阅读 ·
3 点赞 ·
0 评论 ·
7 收藏

半同步/半反应堆线程池

一、什么是线程池 线程池是服务器预先创建的一组线程,这些线程运行着相同的代码,并具有相同的属性。当有新的任务到来的时候,主线程通过某种方式选择线程池中的某一个线程来为之服务,服务完之后又放回线程池中。二、为什么要有线程池 相比于动态创建线程来说,线程池可以提高速度。因为线程的创建和销毁是需要时间的,如果我们预先创建好,用完之后再回收的话,则会节省不少时间。一般线程池中线程的数量
原创
发布博客 2017.05.28 ·
2665 阅读 ·
4 点赞 ·
0 评论 ·
7 收藏

两种高效的并发模式

并发编程的目的是让程序”同时”执行多个任务。如果程序是计算密集型的,并发编程并没有什么优势,反而由于任务的切换使效率降低。但如果程序是I/O密集型的,那就不同了。 I/O操作通常分为两个阶段,即等待和数据搬迁,通常等待所花费的时间比较多。而I/O操作的速度远远低于CPU的计算速度,所以让程序阻塞在I/O操作将浪费大量的时间。如果程序有多个执行线程,则当前被I/O操作阻塞的线程可以放弃CP
原创
发布博客 2017.05.25 ·
2426 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

Reactor模式和Proactor模式

一、Reactor模式(反应器模式) 1、Reactor模式的特点 Reactor用于同步I/O,同步是指用户进程触发IO操作并等待或去轮询的查看I/O操作是否就绪,如果事件就绪的话需要应用程序自己读取或写入数据。(Reactor模式需要用户自己进行I/O操作)。 并发系统常用Reactor模式代替常用的多线程的处理方式,节省系统的资源,提高系统吞吐量。 2、使用同步I/O模
原创
发布博客 2017.05.25 ·
1469 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

网络畅聊系统

1、网络聊天系统简介 简单来说,这个聊天系统可以达到群聊的目的。客户端向服务器发送消息,服务器对这条消息进行转发。由于使用的是udp协议,所以服务器会维护一张用户列表,这个列表记录了所有向服务器发送过消息的客户地址。当某个客户端退出的时候,会向服务器发送一条特殊的指令,然后服务器将该客户地址从用户列表中删除。2、Udp聊天系统原理图 从上图可以看到,服务器端使用生产者消费者模型
原创
发布博客 2017.05.12 ·
2692 阅读 ·
2 点赞 ·
0 评论 ·
10 收藏
加载更多