自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

YiShi's Blog

new site -> https://shiyi.threebody.xyz

  • 博客(176)
  • 资源 (1)
  • 收藏
  • 关注

原创 初识云函数

可访问谁明浪子心-ShiYi’s Blog,获得更好的阅读体验。什么是云函数云函数提供了一种直接在云上运行,无状态的、短暂的、由事件触发的代码的能力。云函数与轻服务的关系ServerLess,即无服务器架构,也叫轻服务,它包含两个部分,如下:函数即服务(FaaS: Function as a Service)函数即服务提供的是计算能力。原有的计算能力,无论是容器也好,虚拟机也...

2018-12-31 11:55:39 15579 2

原创 go包管理工具-glide使用方法及踩坑记录

前言大学以来一直想做一个OJ,终于可以开始,而且是用新学的Go来写,心里还是挺兴奋的。 项目启动,要搭架子,第一件事,当然是选择一个包管理工具。Go的包管理还是挺混乱的,没有一个能像Java的Maven一样足够强大&一统天下,尽管优秀的第三方工具已有十来种,且官方也开始着手开发(快统一江湖吧)。 (ps:虽然包管理很让人糟心,但这并不能影响我对这门语言的热爱)glide安装go get gith

2017-10-02 05:23:28 8401 2

原创 CSDN迁移Hexo脚本分享

前言这一阵子,刚换了落脚地儿,没想好该去折腾什么,恰好看到可以用git page搭建一个博客,就搞了搞。关于主题啊,配置啊什么的,网上都有好多,偏偏迁移这个事儿挺麻烦,幸好有找到一前辈的脚本,可以将CSDN的博客导出为markdown格式,但是其导出来的md文件并不能直接用hexo,想要显示的好一些还需要再用脚本将它二次润色。 本人重写了润色的脚本,并增加了对CSDN的分类的爬取,将其作为hexo

2017-06-18 21:53:27 2251 6

原创 Linux上定时器的实现

方法1. 使用sleep或者usleep这种方法很简单,这里就不具体描述,它的缺点也很明确:精度不够,特别是在系统负载比较大时,会发生超时现象。方法2. 使用信号量SIGALRM + alarm()alarm也称为闹钟函数,alarm()用来设置在经过参数seconds指定的秒数后传送信号SIGALRM给目前的进程。如果参数seconds为0,则之前设置的闹钟会被取消,并将剩下的时间返回。要注意的是

2017-03-02 23:06:51 2245

原创 对比高性能I/O设计模式-Reactor/Proactor

通常,I/O复用机制都需要事件分享器。分享器对象可将来自事件源的I/O事件分离出来,并分发到对应的Read/Write事件处理器。开发人员预先注册需要处理的事件及该事件对应的事件处理器。 Reactor和Proactor都涉及到了事件分享器,不同的是,Reactor是基于同步I/O的,而Proactor是与异步I/O相关。在Reactor模式中,事件分离器等待某个事件或者某个操作的状态发生,比如文

2017-03-01 18:40:34 1500

转载 游戏服务器和一般服务器对比,有何特别?

背景在中国的互联网诸多业务领域中,游戏一直是充当“现金牛”而存在的。但是,在游戏服务器端开发领域中的很多重要问题,并没有被明确的分辨出其特异性,从而得到专门的对待。我们不管是在业界开源领域,还是内部分享中,很少会有专门针对游戏业务特征进行专门设计的组件、类库或者框架。我们从游戏的客户端方面来看,一款专业的游戏客户端引擎,已经是游戏开发的标配,比如最早的Flash Builder,到后期的Cocos2

2017-02-27 02:57:55 6954

转载 各类游戏对应的服务端架构

卡牌、跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个key进行RC4加密。客户端收到key和时间戳后保存在

2017-02-24 22:48:49 10378 1

原创 TCP协议-TCP服务特点和头部结构

TCP服务特点面向连接、基于字节流和可靠传输。TCP的面向连接是什么意思?通信双方都必须先建立连接,然后才能开始数据的读写,双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。 同时,TCP连接是全双工的,就是说,双方数据的读写,可以通过一个连接进行,完成数据交换之后,通信双方都必须断开连接,以释放系统资源。而且,TCP连接是一对一的,所以,基于广播和多播的应用程序不能使用T

2017-02-20 02:22:13 3840 1

转载 Linux内存管理机制

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存(buffer/cache),利用内存读写的高速特性来提高Linux系统的数据访问性能。在这方面,区别于Windows的内存管理。本文从Linux的内存管理机制入手,简单

2017-02-16 04:07:24 4679 2

转载 游戏服务端开发要点

前言ps:一直希望有个游戏服务端的技能树,此文算是指明方向,故记录于此。 知道该去哪打怪、打什么怪,升级才快。 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。希望能帮到大家。一、专业基础1.1 网络1.1.1 理解TCP/IP协议

2017-02-15 02:50:03 2836

原创 TCP建立连接为什么是三次握手,为什么不是两次或四次?

什么是三次握手学过网络编程的人,应该都知道TCP建立连接的三次握手,下面简单描述一下这个过程。 如图所示 第一次握手:客户端发送TCP包,置SYN标志位为1,将初始序号X,保存在包头的序列号(Seq)里。 第二次握手:服务端回应确认包,置SYN标志位为1,置ACK为X+1,将初始序列号Y,保存在包头的序列号里。 第三次握手:客户端对服务端的确认包进行确认,置SYN标志位为0,置

2017-02-09 16:33:45 13207

原创 三步实现自动注册工厂替代switch语句(c++)

概述在学长博客里看到了使用自动注册工厂替代switch语句的文章,想到可以将其用到自己的项目里,就照猫画虎学习着也实现了一个。 这里并不是用其替代创建派生类的传统Factory,而是为了替代服务器中的业务逻辑处理。 记得以前实现的第一个服务器项目:聊天室,里面在解包后,是一长串的switch语句,根据包里类型标志,来决定该如何处理,写起来舒服,可看起来,包括后期维护,实在是太不方便,因为想使用自

2017-01-01 22:05:00 3231 1

原创 clion配置cmake添加boost库

今天发现xcode在文件名修改之后,该文件内补全就失效,网上寻法多次无果,无奈转向clion。 因为clion的项目构建是基于cmake的,想使用boost等第三方库就需要对其进行配置,故将配置内容保存于此。cmake_minimum_required(VERSION 3.6)#设置项目名称project(demo)set(CMAKE_CXX_STANDARD 11)set(BOOST_ROOT

2017-01-01 17:36:57 17678 3

原创 Boost.Asio网络库之io_service分析

io_service概述几乎绝大多数用到Boost.Asio的代码里都会出现这样一个类:io_service。它应该算是Asio库里的核心类了,其本质是一个任务队列,但又不仅仅是个任务队列。基本结构io_service是个接口类(ps:这里解释一下,这里说接口类并不是指类似java的interface类,而是指其是对下层类做了一个包装,全部功能都是调用下层类来完成)。class io_service

2016-12-24 02:44:14 1778

原创 IDEA tomcat三步实现热部署

每次切换桌面<比如切换到浏览器>都会更新类和资源),这样我们在更改jsp文件后,只需切换到浏览器,自动就会进行更新了,感觉很爽上面本人已通过对springMVC控制层进行更改及jsp更改尝试,亲测可行,至于spring的配置更改等等是否有效,还没有尝试,不敢妄言。

2016-12-18 02:19:22 26026 8

原创 SpringMVC基于注解进行URL映射

前言 自己之前写了好几个web程序,都遵从这样的方式:地址栏输入的url,后台一定存在对应的servlet。 然而某天看着自己博客地址,链接由域名和自己用户名(如上图所示),就忍不住开始想了,csdn那么多用户,总不可能有那么多servlet吧。 一定是进行了某种映射,于是去查了些资料,知道了如何去实现这样的效果。使用url映射的好处先说说好处,知道好处才有力气用。 1、缩短url,隐藏实际

2016-12-15 03:23:05 1933

原创 SpringMVC返回json数据(@ResponseBody注解的使用)

最近开始了一个web项目,深深感觉到web方面知识的混杂,越来越明白java为什么可以流行这么多年了,库啊,框架啊,一抓一大把,要多方便有多方便,开发效率提升太高了。最初使用SpringMVC时,为其ModelAndView可以直接返回页面和数据感觉爽到不行,但是当只想返回数据而不返回页面时,该怎么办呢,难道还要每次自己进行json格式转化吗,太麻烦了。用ModelAndView显然不行,因为其必

2016-12-15 02:22:26 30495 5

原创 boost:asio信号量signal_set源码分析及使用

首先我们先看signal_set.hpp,可以看到下面代码#include <boost/asio/detail/config.hpp>#include <boost/asio/basic_signal_set.hpp>namespace boost {namespace asio {/// Typedef for the typical usage of a signal set.typed

2016-12-11 18:02:59 4993 1

原创 shared_ptr智能指针模板类的简单实现(c++11)

前言 最近突然萌生把stl常用的库都通通自己过一遍的想法,算是对泛型编程的一次学习,也深入理解stl,还是对c++11知识的练习,就从智能指针开始吧。 另外,c++11让c++程序变得简洁优雅了许多,对这门语言有点爱不释手了。智能指针原理 通过使用引用计数的方式来自动的对动态申请的内存进行释放,保证指针的生存期和安全性。 对智能指针初始化的时候,会将引用计数初始为1,之后每次拷

2016-12-11 04:51:52 8661 5

原创 boost:asio网络库初学之echo服务器客户端实现

为什么想起来学网络库呢前一阵在网上看到这么一段话 select 实在是太慢了. 在这种背景下, IBM 老大哥带领着MS老弟先搞了 IOCP . 然而开源的人有开源的做法, 在 NIH 综合症的影响下, BSD 的人敢为天下所不齿, 发明了 Kqueue. 同样在 NIH 综合症影响下, Linux 的一群 M* 的猴子捣鼓出了 epoll. 分裂, 让人头疼. 于

2016-12-10 18:58:59 3591

原创 Mac Boost安装及使用(命令行和Xcode)

安装下载boost安装包 官网下载地址 https://sourceforge.net/projects/boost/files/boost/1.62.0/ 2.解压并进入boost_1_62_0文件夹 3.执行boostrap.sh ./boostrap.sh4.上一步执行成功后会生成b2脚本,执行它 ./b2 执行完毕后,头文件在boost_1_62_0/boos

2016-12-10 02:14:05 7251

原创 8086汇编初学之贪吃蛇

前言一直没想过要去学习汇编,觉得需要用汇编的场合无非三种: 1. 与硬件结合很紧密高级语言做不到 2. 时空效率要求甚高算法层面已不能优化到 3. 逆向破解等只能用某些途径看其汇编指令 其余情况下,用汇编无异于有炮不用偏用鸟枪。 本来准备等自己需求以上场合时再去学,但因为学校举办的汇编比赛,计算机学院都要参加,也算是一个由头,于是开始了我的第一个汇编程序。运行效果概述本质上用汇编去写

2016-12-08 04:35:55 13593 19

原创 linux服务器开发之网关服务器的实现

什么是网关服务器 初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。 但是在处理量很大的情况下,一台机器不能满足我们的需求,此时我们应该怎么办。 我们可以将服务端的任务分摊到多台机器上完成,见下图 从图中可见,此时整个服务端主要分为了三部分。 网关服务器:负责连接客户端与逻辑服务器

2016-12-05 21:50:10 8131 2

原创 Epoll-ET模式读写之用户连接的封装

前言 服务端而言,对于每一个新的连接我们都需要去保存其基本信息,如ip地址,套接字fd,也需要赋予其唯一标识如用户名。 这里,我们来谈谈对用户连接的封装。用户连接需要哪些数据1. 套接字描述符 sockfd 执行读写操作时当然不可缺2. 连接信息 sockaddr 基本信息的保存3. 用

2016-12-03 16:36:16 681

原创 Epoll-ET模式下非阻塞读写之Buffer的封装

先说说Epoll的ET模式 epoll默认的模式是LT,要说ET不得不提到LT,LT与ET的区别可以用一句话概括: LT模式下只要socket处于可读状态(添加EPOLLIN事件时)或可写状态(添加EPOLLOUT事件时),就会一直返回其socket。 ET模式下在第一次返回socket后,只有当socket由不可写到可写(添加EPOLLIN事件时)或由不可读到可读(添加EPOLLO

2016-12-03 03:44:34 1861

原创 linux之信号处理函数signal和sigaction

signal回调函数绑定信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。那么我们很多场景下,需要对不同的信号进行捕获并做出响应操作。 在linux上,我们有两种方式完成该操作:1. signal#include <signal.h>signal(int, void (*)(int)); 第一个参数是我们要捕获的信号类型,第二个参数是我们要绑定的

2016-11-22 03:20:44 5427

转载 游戏后台开发九问(腾讯技术分享实录)

[导读]腾讯游戏讯,7月30日消息,第九届中国游戏商务大会网页游戏论坛30日在上海浦东嘉里大酒店展进行相关主题论坛活动。 30日,在上海chinajoy嘉里酒店进行了游戏开发者大会,腾讯游戏的研发部助力总经理聂志明进行了演讲。 他为大家演讲的题目是“游戏后台开发中的九个选择”,他解释,使用这个标题的原因,是因为我们在生活中总会遇到很多选择,这个道理同样适用在游戏开发中。 这九个

2016-11-21 14:21:07 4610

原创 Linux 怎样实现非阻塞connect

前言 凡是接触过socket编程的,对connect函数一定不陌生。因为socket是面向连接的,所以在进行读写操作前我们首先要进行连接,而所谓连接也就是我们常说的三次握手,这个过程就是在connect函数中完成的。 虽然connect函数本身不具备阻塞的功能,但是我们可以通过对socket进行设置和使用select函数可以设置阻塞时间的特性实现非阻塞。为什么要非阻塞 第一,我们可以

2016-11-07 19:50:09 6066

原创 自制Lex-词法分析器生成器(C++)

前言 前一阵子,编译原理课实验内容是要去做一个词法分析器,实现后,觉得没有把正规表达式和NFA、DFA这些知识用上,所以就产生了想自己去实现一个lex的想法,于是就有了这篇博文。 如果还不知道词法分析器该怎么实现,可以去看c语言词法分析初试(C++实现)。简介 上图是维基百科对lex的定义。 从中可以明确lex的功能:读进一个代表词法分析器规则的输入字符串流,然后输出以C语言实做的词

2016-10-31 23:03:26 15187 2

原创 linux之创建守护进程

简介 守护进程是一种运行在后台的特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 其实,本质上守护进程和普通的进程并没有什么区别,只是我们规定了一种进程的编写规则,将其叫做守护进程,仅此而已。特点1. 在后台运行 为了不让其阻塞终端,我们用fork()创建子进程,然后退出父进程,就可以完成在后台运行的目的。2. 脱离控制终端,创建新的会话组和进程组

2016-10-17 17:48:49 1881 1

原创 linux之fcntl&flock建议锁的操作

前言当我们要进行多进程编程的时候,经常存在多个进程需要访问同一个文件的情况,因此会产生进程间访问不一致的问题,那么我们可以用到fcntl函数,我们可以用它来对文件或者文件的一部分进行上锁。 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );fcntl 可以施加建议性锁,也

2016-10-12 22:33:10 1827

原创 c语言词法分析初试(C++实现)

开篇 所谓词法分析,就是将源代码按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位,包括关键字、标识符、运算符、界符和常量等。分析 源程序分解的单词可以归为以下几类:1. 关键字 c语言关键字有不少,这里只列举其中一部分: for,while,do,continue,if,else, char,int,double,return2. 变量名 变量名

2016-10-08 19:19:04 6882

原创 正规表达式转NFA(C++)

分析 表达式里包含五种符号:左括号,右括号,连接符,选择符,闭包符。 连接符因为优先级最高,可以将其过滤掉,不予考虑。闭包符* 首先来说闭包,无非两种情况: X* 或者 (…..)* 两者都可以看做是从一个起始状态,经过诸多输入到达一个终止状态。如 1– X –>2 和 1– (……) –> 2。 那么闭包符可以看做是以下操作:

2016-10-02 02:56:56 18165 22

原创 JavaWeb ServletContext/application初试总结

简介:ServletContext/application 为什么将其两者放在一起介绍呢,因为他们可以被看做是同一个类,只是名字起得不同而已。 ServletContext是在Servlet中使用,而application则作为内置对象用于jsp中。 他们的作用域是整个tomcat的从启动到关闭的过程。 我们可以将其看做是JavaWeb应用里的全局变量。功能 所谓功能,

2016-09-26 18:46:51 1534

原创 IDEA使用maven创建web项目卡住解决办法

解决方法 如下图所示:在Properties中添加一个参数archetypeCatalog=internal,不加这个参数,在maven生成骨架的时候将会非常慢,有时候会直接卡住。理由 archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢

2016-09-23 00:22:06 13036 5

原创 网易游戏面试题 - 谁收到了消息

题意思路 乍一看题,冒出来的思路是,将每个用户凡是在同一个群的两个用户看做是一条无向边,这样所有群的所有用户之间的联系就转化为了一张图,然后以官方用户(id=1)为起点,计算所有可以到达的节点的总数,dfs即可,按着这个思路正准备开始写,发现id max为100000,二维数组是开不了了,临界表的话未免也太繁琐了。 才突然意识到我们只需要对所有用户之间的连通性进行判断,至于具体的连通

2016-09-19 23:30:04 1786

原创 JDBC数据库操作封装(PreparedStatement)

之前有用过老师给的实现好的JDBC封装类,今天自己看着书按自己思路实现了一遍,并将Statement改为了PreparedStatement。代码import com.sun.tools.javac.util.List;import java.sql.*;import java.util.ArrayList;import java.util.HashMap;import java.uti

2016-09-19 20:04:05 2699

原创 Mysql查询重复数据并按条件删除重复行

在对游戏进行合区的过程中, 存在一个情况, 那就是当一个账号在两个区都存在角色的时候, 需要按照条件对重复角色进行删除, 比如以等级为条件, 只保留等级高的.解决方案用mysql语句, 两条就可以解决: 首先, 第一条语句create temporary table temp as select user_id,max(level) as MAXID from user group by

2016-09-02 14:28:24 4735

原创 java程序操作命令行

使用 在写java项目时, 有些特殊情况下需要用到操作命令行, 以前用过好几次, 都是用的时候从网上找, 用完又忘记, 用一次找一次, 所以这次干脆将其保存在这里./** * Created by shiyi on 16/8/30. */import java.io.BufferedReader;import java.io.InputStreamReader;public class

2016-08-31 15:38:47 3748

原创 步步为营-墙棋AI人机对战(Android)

放纵了三天了,之前写了一半懒得去动的墙棋,反而在这几天间隙断断续续完成了,也是挺可笑的。简介-关于墙棋 路墙棋(Quoridor),或译墙棋、步步为营,是由Mirko Marchesi(米尔科·迈凯西)设计、Gigamic Games发行的两到四人对战的棋类游戏(桌面游戏),并在1997年被门萨国际评选为门萨推荐的游戏。1998年游戏杂志(Games Magazine)年度游戏大奖。

2016-08-01 19:30:50 6805 3

C++ GUI Qt4编程

本书详细讲述了用最新的qt版本进行图形用户界面应用程序开发的各个方面。前5章主要涉及qt基础知识,后两个部分主要讲解qt的中高级编程,包括布局管理、事件处理、二维/三维图形、拖放、项视图类、容器类、输入/输出、数据库、多线程、网络、xml、国际化、嵌入式编程等内容。对于本书讲授的大量 qt4编程原理和实践,都可以轻易将其应用于qt4.4、qt4.5以及后续版本的qt程序开发过程中。

2015-08-03

空空如也

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

TA关注的人

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