- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 C++ noexcept关键字
noexcept简介noexcept有两个作用,一是作为说明符,用来说明函数是否跑出异常,一是运算符,能够判断函数是否有声明不会抛出异常。说明符举例:运算符举例:如果在移动构造时发生了异常,则将会发生很严重的错误,原本的数据也不可用,因此,我们需要保证移动构造的时候不抛出异常。如果函数没有抛出异常的可能,则函数可以使用移动构造,反之,则使用复制构造。下面的代码是一个强制开发者实现类型T的移动操作的交换值函数如果类型T的 移动构造和移动赋值函数会抛出异常,则会编译失败,这样让写类型T的开发者强制实现不抛出异常
2022-06-19 18:19:48
668
1
原创 Mysql事务以及特性
事务(transaction),是一个操作序列。这些操作要么都做,要么都不做。事务有四个特性,即ACID。Atomicity(原子性),指一个事务是一个不可分割的工作单位,其中的操作要么都成功,要么都失败,不能存在部分成功或者部分失败的情况。如果事务中一个SQL语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态。InnoDB保证原子性是通过redo log以及undo log来进行的。在InnoDB中,redo log是以512字节进行存储的,正好是磁盘页大小,因此写入是原子性的,不需要额外的
2022-06-10 15:35:25
661
原创 Redo log
redo,重做,目的是恢复数据库的操作,在发生意外时进行重新操作,保证数据安全。Redo Log重做日志,事务中修改的任何数据,都会存储到日志中,包含表空间id、插入的记录所在的页号、insert的具体数据等。当数据库启动时,会根据checkpoint来判断哪些数据是需要恢复的。进行数据恢复时,innodb将从LOG_CHECKPOINT_LSN所指向的redo文件位置开始进行数据恢复。图一 lsn其中,checkpoint_page = redo_lsn - checkpoint_lsn,指已经记录到re
2022-06-10 15:33:26
190
原创 根据UID获取B站用户头像
示例:博主的uid是350692333获取用户信息的API https://tenapi.cn/bilibili/?uid=350692333然后会得到如下的数据{ "code": 200, "data": { "uid": "350692333", "name": "minfeee", "level": 4, "sex": "男", "description": "", "avatar": "http://i2.hdslb.com/bfs/face/02b0b379a8c0746fe20994972de5
2022-06-01 11:46:15
2343
原创 dup函数与CGI服务器
把标准输出重定向到一个网络连接。使用dup或者dup2函数来实现dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd指向相同的文件、管道或者网络连接。同时,dup函数返回的新文件描述符,总是取当前系统可用的最小整数值。dup2函数,返回的新文件描述符不小于newfd的整数值。dup\dup2函数,失败时返回-1并设置errno。因此,我们把本地的输出重定向到网络连接,就可以创建一个CGI服务器。
2022-06-01 11:43:34
101
原创 根据UID获取B站用户头像
示例:博主的uid是350692333获取用户信息的APIhttps://tenapi.cn/bilibili/?uid=350692333然后会得到如下的数据{ "code": 200, "data": { "uid": "350692333", "name": "minfeee", "level": 4, "sex": "男", "description": "", "avatar": "http://i2.hdslb.com/bfs/face/02b0b379a8c0746fe209949
2022-05-19 23:22:12
1687
原创 游戏设计模式-单例模式
当我刚进入游戏行业的时候,所编写的代码,使用了不少的单例,但随着后来的很多bug,我开始意识到单例模式的弊端。1 什么是单例模式“确保一个类只有一个实例,并为其提供一个全局访问入口。单例模式提供了在编译期就能确保某个类只有一个实例的方法。单例的定义:(1)构造函数私有化,防止外界创建出对象;(2)使用一个唯一的变量指向该类的唯一实例;(3)提供一个开放接口供外部使用。2 创建单例的几种方法(1)Lazy Singleton(懒汉):单例在第一次使用时才会被创建出来。
2022-04-20 22:04:43
4579
原创 游戏设计模式-原型模式
使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象。原型模式的核心思想是:一个对象可以生成与自身相似的其他对象。假设我们有一个怪物的类,我们可以这样构造:#include <iostream>class Enemy{public: virtual ~Enemy() {} virtual std::shared_ptr<Enemy> Clone() = 0;};class BirdEnemy :public Enemy{public.
2022-04-14 12:06:06
3377
原创 游戏设计模式-观察者模式
成就系统,基本上是每个游戏里都会涉及到的系统,但如果直接使用其它系统的函数接口,你将会发现整个项目中,每个系统都要和成就系统耦合在一起。这是一件极其糟糕的事情。观察者模式可以解决这件事情。首先,我们先定义两个类,分别是观察者和被观察者。观察者:class Observer{ friend class Subject;public: Observer() :next(nullptr), previous(nullptr) {} void OnNotify(con.
2022-04-09 23:38:28
5341
原创 游戏设计模式-命令模式
游戏中,玩家的输入方式有很多种,例如键盘、鼠标等。玩家输入操作,游戏需要调用相应的逻辑,最简单的处理方式是:if (Input.GetKeyDown("Q")) Jump();else if (Input.GetKeyDown("T")) Idle();else if (Input.GetKeyDown("A")) Attack();else if (Input.GetKeyDown("Z")) Skill();...
2022-04-07 23:57:14
3365
原创 Linux调整随机端口范围(服务器启动失败 端口被占用)
Linux调整随机端口范围博主最近在工作中遇到了问题,服务器启动不起来,bug显示端口被占用。端口是被connect端给占用了,非listen端。
2022-03-09 10:20:31
4524
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人