技术转载
文章平均质量分 86
转载分享
昔拉天使
I wanna the world know my existence.
展开
-
mysql数据导入到redis_快速将MySQL的数据导入Redis
简介通过pipe将MySQL数据批量导入Redis,自Redis 2.6以上版本起,Redis支持快速大批量导入数据,即官网的Redis Mass Insertion,即Pipe传输,现在的业务场景是将mysql中某张表的所有数据传输到redis中存储起来。大致思路是用MySql的concat()方法将查询出来的数据按照resp协议的格式拼接成redis命令集合,再通过redis-cli --pipe批量执行命令redis存储设计假设数据库为test,表结构如下:create database转载 2022-03-31 04:28:31 · 3296 阅读 · 0 评论 -
java服务器gc停顿_JVM的GC停顿时间过长该怎么处理?
应用运行过程中是不希望出现长时间的GC停顿的,因为这会影响服务的可用性,导致用户体验变差,甚至会严重损害一些关键的应用程序。本文将会列出可能导致GC停顿时间长的一些原因和解决方案。1. 对象创建的速度过高如果应用创建对象的速度非常高,随之而来的就是GC频率也会变快,然后会导致GC的停顿时间变长。所以说,优化代码以降低对象的创建速率是降低GC停顿时间最有效的方法。这可能是一件非常耗时的事情,但是却非常值得去做。可以使用JProfiler, YourKit, JVisualVM这样的性能监控工具来帮助优化转载 2022-03-31 04:08:53 · 2958 阅读 · 0 评论 -
虚基类
当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。在继承中产生歧义的原因有可能是继承类继承了基类多次,如图,子类C最后会接受分别来自A和B的同一个或多个相同拷贝,从而产生了多个拷贝,即不止一次的通过多个路径继承类在内存中创建了基类成员的多份拷贝。而这些是A和B从父类继承而来,...转载 2020-04-23 11:31:11 · 148 阅读 · 0 评论 -
内存区域的划分和分配
一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。用malloc...转载 2020-04-22 22:39:28 · 608 阅读 · 0 评论 -
C++模板的使用
C++ 模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector 。您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。函数模板模板函数定义的...转载 2020-01-26 21:24:15 · 141 阅读 · 0 评论 -
std::function与回调类
std::function是c++11中提供的Callable类,所以本篇文章中整理了function的使用方式,及以function为基础封装回调类。function的使用#include <iostream>#include <string>#include <functional>int add(int a, int b){ re...转载 2020-01-21 18:27:33 · 703 阅读 · 0 评论 -
C++中的定位放置new(placement new)
一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。定位放置new操作的语法形式不同于普通的new操作。例如,一般都用如下语句A* p=new A;申请空间,而定位放置new操作则使用如下语...转载 2020-01-18 11:08:26 · 423 阅读 · 0 评论 -
值传递、指针传递、引用传递的区别
值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。void swap(int a,int b){ int temp; temp=a; a=b; b=temp; cout&l...转载 2020-01-17 17:47:51 · 432 阅读 · 0 评论 -
统计整数n的二进制表示中1的个数
(1)逐位判断(位运算)int counter_ones(unsigned n){int counter = 0;While (n) {counter += n&1;n >>=1;}return counter;}(2)一个整型不为0,那么二进制表示时,至少包含一位1。如果整数减去1,那么最右边的1变成0,而该1后面的0变成1,其余位不变。将原来的整数和...转载 2020-01-10 01:04:09 · 957 阅读 · 0 评论 -
C++中存储区的划分
一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放4.另外还有一个专门放常量的地方。- 程序结束释放在函数体中定义的变量通常是在栈上,...转载 2020-01-09 20:02:49 · 179 阅读 · 0 评论 -
c++纯虚函数与虚函数
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。纯虚函数纯虚函数形为virtual void run() = 0;纯虚函数在基类中是一定没有定义的 只会在基类中声明,并且要求子类一定要重...转载 2020-01-09 13:09:16 · 1507 阅读 · 0 评论 -
C++ vector中的resize,reserve,size和capacity函数讲解
前言在介绍resize(),reserve(),size()和capacity()函数之前,先简单介绍一下c++中vector的概念。vector:顺序容器(可变大小数组)。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。既然vector是个容器,那么一定相关特性,如添加元素、删除元素和查询容器大小等操作。本文重点介绍vector中的resize(),reserve(),size(...转载 2020-01-09 12:01:57 · 480 阅读 · 0 评论 -
C++ 四种cast常用法
static_cast用法:static_cast < type-id > ( expression )1.用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。2.用于基本数据类型之间的转换,如把int转换成char,把int转换成enum...转载 2020-01-08 22:01:13 · 865 阅读 · 0 评论 -
C++11常用新特性
最近工作中,遇到一些问题,使用C++11实现起来会更加方便,而线上的生产环境还不支持C++11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异步编程十分实用的Future/Promise以及智能指针等,将不做整理介绍,组内使用的框架已经支持并广泛使用了,用的是自己公司参考boost实现的版本)1. nullptrnullptr 出现的目...转载 2020-01-08 21:46:46 · 132 阅读 · 0 评论 -
C++虚函数和虚函数表原理
虚函数的地址存放于虚函数表之中。运行期多态就是通过虚函数和虚函数表实现的。类的对象内部会有指向类内部的虚表地址的指针。通过这个指针调用虚函数。虚函数的调用会被编译器转换为对虚函数表的访问:ptr->f(); //ptr代表this指针,f是虚函数*(ptr->vptr[1])(ptr);上述代码中,ptr代表一个this指针,ptr指向的vptr是类内部的虚表指针。这个...转载 2020-01-08 21:35:20 · 700 阅读 · 0 评论 -
c++五种内存分配、堆与栈区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区...转载 2020-01-08 10:07:33 · 839 阅读 · 1 评论 -
C++中的空类,默认产生哪些类成员函数?
答:class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* operator&(); // 取址运算符...转载 2020-01-07 23:58:19 · 1186 阅读 · 0 评论 -
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。一、Const作用如下表所示:No.作用说明参考代码1可以定义const常量const int Max = 10...转载 2020-01-07 19:04:02 · 92 阅读 · 0 评论 -
C++ 拷贝构造函数与赋值函数
这里我们用类String 来介绍这两个函数:拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数。为啥形参必须是对该类型的引用呢?试想一下,假如形参是该类的一个实例,由于是传值参数,我们把形参复制到实参会调用拷贝构造函数,如果允许拷贝构造函数传值,就会在拷贝构造函数内调用拷贝构造...转载 2020-01-07 19:00:41 · 573 阅读 · 0 评论 -
docker容器连接
https://www.runoob.com/docker/docker-container-connection.html转载 2020-01-17 18:42:36 · 316 阅读 · 0 评论 -
docker踩坑"Cannot connect to the Docker daemon at unix:/var/run/docker.sock. Is the docker daemon"
前言由于最近想把阿里云服务器上发布的内容做一下迁移,就想起之前有听说过的docker容器技术。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。发现在慢慢熟悉 docker 之后,准备将服务器的内容放到容器(container)中打包(...转载 2020-01-16 17:53:45 · 2191 阅读 · 0 评论 -
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
1:操作设置取消自动锁屏: setting–>power—>never2: 设置自动锁屏快捷键:快捷键设置一般在setting–>devices—>keyboard中设置,其中,有些已经有的可以直接修改,没有的可以添加,例如,锁屏的相关快捷键设置,我这里已经修改:同时,我新增了ctrl+alt+a为截屏并保存在粘贴板上的快捷设置:...转载 2020-01-17 17:53:31 · 1586 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克...转载 2020-01-12 22:57:54 · 164 阅读 · 0 评论 -
【Unix 网络编程】TCP状态转换图详解
在前面,已经介绍了TCP协议的三路握手和四次挥手。如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输、断开TCP连接通道(四次挥手)。这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程。先看TCP状态状态转换图。上半部分是TCP三路握手过程的状态变迁,下半部分是TCP四次挥手过程的状态变迁。CLOSED:起始点,在超时或者连接关闭时候进入...转载 2020-01-12 23:01:00 · 138 阅读 · 0 评论 -
TCP和UDP的最完整的区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接...转载 2020-01-09 19:58:00 · 278 阅读 · 0 评论 -
TCP的三次握手与四次挥手理解
本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节...转载 2020-01-08 21:51:28 · 106 阅读 · 0 评论 -
五种IO模型(详解+形象例子说明)
在网络环境下,通俗的讲,将IO分为两步:1.等;2.数据搬迁。如果要想提高IO效率,需要将等的时间降低。五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个被称为同步IO。在介绍五种IO模型时,我会举生活中钓鱼的例子,加深理解。1.阻塞IO(blocking I/O)A拿着一支鱼竿在河边钓鱼,并且一直在鱼竿前等,在等的时候不做其他的事情,十分专心...转载 2020-01-08 21:28:15 · 597 阅读 · 0 评论 -
FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别
游戏人工智能AI中最常听见的就是这三个词拉:FSM这个不用说拉,百度一大堆解释,简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成。比如士兵的行为有“巡逻”,“追击敌人”,“攻击敌人”,“逃跑”等行为,响应的事件就有“发现敌人”,“追到敌人”,“敌人逃跑”,“敌人死亡”,“自己血量不足”等。那么可以写成这样一个状态机:1.士兵 “巡逻”,如果 “发现...转载 2020-01-12 23:17:59 · 8786 阅读 · 0 评论 -
洗牌算法shuffle
将原来数组的数组进行打散,使原数组的某个数在打散后的数组中的每个位置上等概率的出现。很容易想到,需要用到随机数函数,而且应该是一个平均分布的随机数函数,还需要一个不放回的采样的生成模式。(1)random.seed([x])伪随机数生成模块。如果不提供 seed,默认使用系统时间。使用相同的 seed,可以获得完全相同的随机数序列,常用于算法改进测试。from random impo...转载 2020-01-08 22:04:45 · 259 阅读 · 0 评论 -
游戏服务器的常用架构
游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类服务的特点是要特别关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。游戏服务器架构要素对于游戏服务端架构,最重要的三个部分就是,如何使用CPU、内存、网卡的设计:...转载 2020-01-08 19:11:12 · 405 阅读 · 3 评论 -
游戏排行榜算法设计实现比较
以前在音乐做过一些实时投票,积分排名;单曲、专辑等排行榜;游戏中也有类似的战斗力排行;SNS的游戏又有好友排行等,对于此类的排行算法在此做个总结。需求背景:查看前top N的排名用户查看自己的排名用户积分变更后,排名及时更新方案一:利用MySQL来实现,存放一张用户积分表user_score,结构如下:游戏排行榜算法设计实现比较取前top N,自己的排名都可以通过简单的sql语句搞...转载 2020-01-08 19:07:25 · 1912 阅读 · 0 评论