C++11 多线程 —— 同步操作之定时等待

(两种方式)There are two sorts of timeouts you may wish to specify: a duration-based timeout, where you wait for a specific amount of time (for example, 30 milliseconds), or an absolute timeout, where you wait until a specific point in time (for example,
分类: 其他 发布时间: 03-13 22:39 阅读次数: 0

C++ 常用算法(1)—— 只读算法

头文件:<algorithm> all_of template <class InputIterator, class UnaryPredicate> bool all_of(InputIterator first, InputIterator last, UnaryPredicate pred); 解释:如果 pred 对范围 [first,last) 中的所有元素返回true或者范围为空,则返回true,否则返回false。 例子: std::array<int, 8> foo = {3
分类: 其他 发布时间: 03-13 22:39 阅读次数: 0

字符串的大小写转换 —— 高效方案

问题:输入一个长度为 N 的字符串 S(其中每个字符都是可打印的 ASCII 码),将其中的大写字母转换为小写字母。 方法1:直接能考虑的转换方法是依次比较 S 中的每个字符,然后对其进行转换。 for(int i = 0; i < N; i++) { if ((s[i] >= 'A') && (s[i] <= 'Z') ) { s[i] += 'a' - 'A'; } } 这样的操作方法存在以下问题: (1)每次仅仅对一个字节进行操作,不能发挥 32 位处理器全字操作的能力;
分类: 其他 发布时间: 03-13 22:39 阅读次数: 0

Effective C++ 条款 —— 了解C++默默编写并调用哪些函数

定义一个类时,如果自己没有显式声明,那么编译器就会为它声明编译器版本的一个默认构造函数、一个拷贝构造函数、一个拷贝赋值运算符和一个析构函数。唯有当这些函数被需要(被调用)时,它们才会被编译器创建出来,而且它们都是public的。 编译器版本的默认构造函数会调用 base class 和 non-static 成员变量的默认构造函数,而编译器版本的析构函数也将调用 base class 和 non-static 成员变量的析构函数。 而且,编译器创建的析构函数是non-virtual的,除非这个
分类: 其他 发布时间: 03-13 22:38 阅读次数: 0

C++11多线程 —— 内存模型基础

1. 对象和内存位置 (什么是对象?) The C++ Standard defines an object as “a region of storage” , some of these objects are simple values of a fundamental type such as int or float, whereas others are instances of user-defined classes. (内存位置)Whatever its type, an o
分类: 其他 发布时间: 03-13 22:38 阅读次数: 0

C++派生类的拷贝构造函数、拷贝赋值运算符

1. 派生类的拷贝构造函数 如果基类有定义默认构造函数,则派生类的拷贝构造函数默认会调用基类的默认构造函数初始化基类部分。 如果基类没有定义默认构造函数,则派生类必须在成员初始化列表中,显式调用基类相应的构造函数来初始化基类部分。 例子 // 基类 class B { private: int b; public: //B(): b(-1) {} B(int v): b(v) {} B(const B &ob): b(ob.b) {} int get_b() const {
分类: 其他 发布时间: 03-13 22:38 阅读次数: 0

Effective C++ 条款 —— 若不想使用编译器自动生成的函数,就该明确拒绝

方法1:将这些成员函数声明为 private 的,而且故意不去实现它们。 class HomeForSale { private: // 只有声明 HomeForSale(const HomeForSale&); HomeForSale& operator=(const HomeForSale&); ... }; 缺点是:class内的成员函数或friend函数之内依然可以调用它们,这将造成链接错误。 方法2:将这些函数声明在一个基类的 private 区域中
分类: 其他 发布时间: 03-13 22:37 阅读次数: 0

MySQL explain分析SQL语句

explain的作用是分析查询的SQL语句的好坏程度,语法为: EXPLAIN SELECT * FROM mark_table WHERE mid = 8; explain 查询语句 通过explain可以分析SQL语句的以下性能: 1、表的读取顺序 2、数据读取操作的操作类型 3、哪些索引可以被使用 4、哪些索引实际被使用 5、表之间的引用 6、每张表有多少行被优化器查询 id:select查询的序列号,为一组数字,表示查询中执行的顺序,id值越大,越先被执行,id值相同,则由上到下顺序
分类: 其他 发布时间: 03-13 22:37 阅读次数: 0

MySQL 索引失效的情况、为排序使用索引

1、使用is null 、 is not null 、!=, 索引会失效 2、对索引列进行计算、函数、类型转换(手动或自动,字符串不加引号时,会自动转型),索引会失效 3、在有范围值时,范围条件后面的索引列失效 4、like以通配符开头,索引会失效 5、少用or、用or时索引会失效 为排序使用索引:
分类: 其他 发布时间: 03-13 22:37 阅读次数: 0

MySQL 表锁、行锁、间隙锁

表锁: 表锁有两种模式:表共享读锁、表独占写锁 表共享读锁:读锁不会阻塞其他进程对同一表的读操作,但阻塞写操作,只有释放锁后其他进程才可以写 表独占写锁:写锁会阻塞其他进程对同一表的读和写,只有写锁释放后,其他进程才可以读写 简而言之:读锁会阻塞写,不阻塞读;写锁阻塞读和写。 行锁:只锁住某一行或多行的读写操作,对同一张表的其他行不加锁,使用InnoDB存储引擎,支持事务。 索引失效会导致行锁变成表锁。 间隙锁: 当用范围条件检索数据并请求共享或排他锁时,InnoDB会给符合条件的已有记录的索
分类: 其他 发布时间: 03-13 22:36 阅读次数: 0

Nginx 安装nginx

一、下载Nginx wget http://nginx.org/download/nginx-1.6.2.tar.gz 二、解压 mv nginx-1.6.2.tar.gz /usr/local tar -zxvf nginx-1.6.2.tar.gz ## 个人习惯放在/usr/local目录下,有快捷命令直接解压到该目录,请自行百度 三、下载所需要的依赖库文件 yum install -y pcre yum install -y pcre-devel yum install -y z
分类: 其他 发布时间: 03-13 22:36 阅读次数: 0

Nginx keepalived+nginx高可用集群

一、服务器准备 ip 服务器 软件 192.168.43.142 主机 1,主用 Nginx+keepalived 192.168.43.141 主机 2,备用 Nginx+keepalived 192.168.43.131 从机 1,应用服务 Tomcat 192.168.43.133 从机 2,应用服务 Tomcat 二、安装Nginx和keepalived ① 安装Nginx,参看博客《安装Nginx》 ② Nginx的集群部署,参看博客《Nginx负载均衡》 ③ 安装keepalive
分类: 其他 发布时间: 03-13 22:36 阅读次数: 0

小表驱动大表

在两个表进行连接时,用小表来驱动大表可以提高系统的执行效率。 两表连接时,先执行的是两个表的笛卡尔积,接着是 on 的条件筛选,然后是 join 类型进行外部行的添加。 如果是 inner join,没有什么差别; 如果是 left join,就应该把大表放在后面; 如果是 right join,就应该把大表放在前面。
分类: 其他 发布时间: 03-13 22:35 阅读次数: 0

SqlServer 数据库表的数据迁移

这是前两天做的一个项目,主要功能就是把表A的数据,迁移到表B和表C,然后删除掉表A的数据。 限制就是,在表A中没有任何的标识列可以证明了该表的某行数据被操作过,并且,还在往表A中不停的插入数据。如果直接使用 insert into B(列1,列2,,,)  select 列1,列2,,, from A insert into C(列1,列2,,,)  select 列1,列2,,, from A delete from A 这样的语句进行插入时,在数据量小的时候,观察不出问题,但是使用脚本
分类: 其他 发布时间: 03-13 22:35 阅读次数: 0

网络编程 BIO(Blocking IO)

在网络编程中,主要的是ServerSocket和Socket这两个类,以及输入输出流的包装。 需要注意的是,会进行阻塞的几个点。accept()方法、readLine()方法以及键盘输入等都会进行阻塞。 在服务端,使用新起线程来和客户端连接,保证每个客户端都是一个新的线程!这样,就算发生阻塞时,也只会阻塞一个线程,其他线程仍旧可以正常工作。 客户端与服务端通过包装后的输入输出流来进行信息交互,服务端的写就是客户端的读,客户端的写就是服务端的读。 服务端代码如下: public class M
分类: 其他 发布时间: 03-13 22:35 阅读次数: 0

网络编程 NIO(Non-Blocking IO)

NIO主要是通过channel通道来运输数据,buffer来装载数据,通过多路复用器selector来注册通道。值得注意的是,每次使用buffer前,装载时记得clera()一下,读取时flip()一下。 NIO也有阻塞的地方,accept()方法依然会阻塞等待客户端的连接,channel.read()方法也会阻塞等待读取,任何的输入操作也会阻塞,多路复用器的select()方法也是阻塞的。 NIO服务端代码: public class NIOServer implements Runnab
分类: 其他 发布时间: 03-13 22:35 阅读次数: 0

网络编程 AIO(Asynchronous IO)

AIO,异步非阻塞IO,是JDK1.7引入的,在nio包下,相比NIO,多了4个异步通道类,AsynchronousSocketChannel,AsynchronousServerSocketChannel,AsynchronousFileChannel,AsynchronousDatagramChannel。和NIO类似,都是使用ByteBuffer来缓存数据,Channel来传输数据,不过它的读写方法是异步操作的。 在AIO中,主要是通过一个CompletionHandler的实现类来进行
分类: 其他 发布时间: 03-13 22:34 阅读次数: 0

网络编程 netty

Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 client--server交互demo server: 在server中定义线程组、配置、端口、缓存区大小等。 public class MyNettyServer { private EventLoopGroup acceptGroup;
分类: 其他 发布时间: 03-13 22:34 阅读次数: 0

网络编程 netty使用结束标记解决粘包问题

netty使用tcp/ip协议传输数据。而tcp/ip协议是类似水流一样的数据传输方式。多次访问的时候有可能出现数据粘包的问题。客户端和服务器,协商定义一个特殊的分隔符号,分隔符号长度自定义。如:‘#’、‘$_$’、‘AA@’。在通讯的时候,只要没有发送分隔符号,则代表一条数据没有结束。 大致内容同前一篇博客相似,不同之处在于bootstrap.childHandler()方法,在该方法中,定义了一个ChannelHandler[] acceptorHandlers = new Channel
分类: 其他 发布时间: 03-13 22:34 阅读次数: 0

网络编程 netty定时断线、重连

客户端数量多,且需要传递的数据量级较大。可以周期性的发送数据的时候,使用该机制。要求对数据的即时性不高的时候,才可使用。 优点是可以使用数据缓存。不是每条数据进行一次数据交互。可以定时回收资源,对资源利用率高。 对服务端来说,主要是读数据,使用ReadTimeoutHandler类来控制,ReadTimeoutHandler定义一个定时断线处理器,当多长时间内,没有任何的可读取数据,自动断开连接。对客户端来说,则是写,使用的是WriteTimeoutHandler类。 代码上,在客户端多了一个
分类: 其他 发布时间: 03-13 22:34 阅读次数: 0