内存类型

一份详细的 MySQL 规范

会有一股神秘感。 提交于 2019-11-27 02:24:30
一、数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低) 二、数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好 2、数据库和表的字符集统一使用UTF8 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效 3、所有表和字段都需要添加注释 使用comment从句添加表和列的备注 从一开始就进行数据字典的维护 4、尽量控制单表数据量的大小,建议控制在500万以内 500万并不是MySQL数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题

C++--第5课 - 新的关键字

回眸只為那壹抹淺笑 提交于 2019-11-27 00:09:56
第5课 - 新的关键字 1. 动态内存分配 C++中通过new关键字进行动态内存申请,C++中的动态内存申请是基于类型进行的,delete关键字用于内存释放。 变量申请: Type* pointer = new Type; //...... delete pointer; 数组申请: Type* pointer = new Type[N]; //...... delete[N] pointer; 程序:C++中的动态内存分配 #include <stdio.h> int main() { int* p = new int; *p = 5; *p = *p + 10; printf("p = %p\n", p); printf("*p = %d\n", *p); delete p; p = new int[10]; for(int i=0; i<10; i++) { p[i] = i + 1; printf("p[%d] = %d\n", i, p[i]); } delete[] p; printf("Press any key to continue..."); getchar(); return 0; } l new关键字和malloc函数的区别 new关键字是C++的一部分,malloc是由C库提供的函数。new以集体类型为单位进行内存的分配

深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

岁酱吖の 提交于 2019-11-26 21:38:00
C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿, 其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。  1 数组的本质    数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。  2 指针。    指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。。由于地址也是整数,在32位平台下,指针默认为32位。。  3 指针的指向?    指向的直接意思就是指针变量所保存的其他的地址单元中所存放的数据类型。    int * p ;//p 变量保存的地址所在内存单元中的数据类型为整型 float *q;// ........................................浮点型 不论指向的数据类型为那种,指针变量其本身永远为整型,因为它保存的地址。 4 字符数组。。。 字面意思是数组,数组中的元素是字符。。确实,这就是它的本质意义。 char str[10]; 定义了一个有十个元素的数组,元素类型为字符。 C语言中定义一个变量时可以初始化。 char str[10] = {"hello world"}; 当编译器遇到这句时,会把str数组中从第一个元素把hello

第512篇--Interview Summary (.NET)

蓝咒 提交于 2019-11-26 21:37:01
.NET 面试基本知识总结,希望对亲们有用 1 ADO.NET 5 个对象? DBConnection, DBCommand, DBAdapter, DataSet, DBDataReader 2 O/R Mapping? Hibernate 框架 读取配置,根据配置中的类名路径和字段名进行反射实例化,调用方法取值赋值 3 WCF 安全机制 ? 传输安全(Transfer Security)、授权或者访问控制(Authorization OR Access Control)以及审核(Auditing. 4 Const vs readonly? 用 const 修饰符声明的成员叫常量,是在编译期初始化并嵌入到客户端程序 static readonly, 用 static readonly 修饰符声明的成员依然是变量,只不过具有和常量类似的使用方法:通过类进行访问、初始化后不可以修改。但与常量不同的是这种变量是在运行期初始化. 5 可以有两个 UI 线程不? why? No 6 P/Invoke 是什么? Extern 是什么意思? [DllImport("User32.dll")] static extern Boolean MessageBeep(UInt32 beepType); 导入外部的win32程序集 7 params 有什么用? params

SGI STL内存管理

随声附和 提交于 2019-11-26 20:17:18
SGI STL内存管理 在SGI STL版本的内存管理中,使用这样一种方式来分配内存: 内存分配+对象初始化 。首先是分配内存,其次是根据对象的类型(是否为POD【Plain of Data】)来使用最有效的方式来初始化对象。回收内存也是用同样的方式: 析构对象+回收内存 ,根据对象是否为POD类型,确定最有效的析构方式。 SGI STL使用双层级配置器,第一级配置器直接使用 malloc()和free() ,第二级根据如下策略:当配置区块>128 Bytes时,视之为“足够大”,调用一级配置器,否则视之为过小,调用二级配置器。 一级配置器:__malloc_alloc_template template <int __inst> //非型别参数,没排上用处 class __malloc_alloc_template { private: static void* _S_oom_malloc(size_t); //用来处理内存不足的情况,out of memory static void* _S_oom_realloc(void*, size_t); static void (* __malloc_alloc_oom_handler)(); public: static void* allocate(size_t __n) //分配内存 { void* __result =

java并发编程之美-阅读记录2

被刻印的时光 ゝ 提交于 2019-11-26 17:55:36
2.1什么是多线程并发编程   并发:是指在同一时间段内,多个任务同时在执行,并且执行没有结束(同一时间段又包括多个单位时间,也就是说一个cpu执行多个任务)   并行:是指在单位时间内多个任务在同时执行(也就是多个cpu同时执行任务)      而在多线程编程实践中,线程的个数一般是多于cpu的个数的 2.2为什么要多线程并发编程   多个cpu同时执行多个任务,减少了线程上下文切换的开销 2.3线程安全问题   共享资源:就是说该资源可以被多个线程持有,或者说能够被多个线程访问。   对共享资源的修改会造成线程安全问题。 2.4共享变量的内存可见性问题   java内存模型(JMM)规定,所有的变量都存储在主内存中,当线程使用变量时,会将主内存中的变量复制一份到自己的工作内存,之后线程操作的变量都是自己工作内存(L1缓存或者L2缓存或者寄存器)中的变量。   这样对于内存不可见(没有使用volatile修改的变量)的变量来说,在不同线程中就可能存在不同的值。就那下图一个双核cpu系统来说,当操作一个共享变量X时,线程A就会获取当前内存中的变量X,由于线程A是第一次操作,当前工作内存中没有该变量,此时,线程A就会将主内存中的变量X复制一份到自己的工作内存(L1/L2缓存),线程A给变量X重新赋值(假设主内存中默认值为1,线程A修改为2),修改后,线程A会将修改后的值重新刷会主内存

MySQL 规范

微笑、不失礼 提交于 2019-11-26 17:34:21
文章目录 数据库命令规范 数据库基本设计规范 数据库字段设计规范 索引设计规范 常见索引列建议 如何选择索引列的顺序 避免建立冗余索引和重复索引 优先考虑覆盖索引 索引SET规范 数据库SQL开发规范 数据库操作行为规范 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低) 数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好 2、数据库和表的字符集统一使用UTF8MB4 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效 3、所有表和字段都需要添加注释

Netty相关

☆樱花仙子☆ 提交于 2019-11-26 17:09:42
1.BIO、NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理, BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的。 NIO的特点:事件驱动模型、单线程处理多任务、非阻塞I/O,I/O读写不再阻塞,而是返回0、基于block的传输比基于流的传输更高效、更高级的IO函数zero-copy、IO多路复用大大提高了Java网络应用的可伸缩性和实用性。基于Reactor线程模型。 在Reactor模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。如在Reactor中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器,分发器调用事件对应的处理器、事件处理器完成实际的读操作,处理读到的数据,注册新的事件

JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

怎甘沉沦 提交于 2019-11-26 17:04:24
1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 ========正文分割线===== 一、背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域。 关于方法区和永久代: 在HotSpot JVM中,这次讨论的 永久代 ,就是上图的方法区(JVM规范中称为方法区)。《Java虚拟机规范》只是规定了有方法区这么个概念和它的作用,并没有规定如何去实现它。在其他JVM上不存在永久代。 1.2 JDK8永久代的废弃 JDK8 永久代变化如下图: 1.新生代:Eden+From Survivor+To Survivor 2.老年代:OldGen 3.永久代(方法区的实现) : PermGen----->替换为Metaspace(本地内存中) 二、为什么废弃永久代(PermGen) 2.1 官方说明 参照JEP122:http://openjdk.java.net/jeps/122,原文截取: Motivation This is part of the JRockit and Hotspot convergence effort. JRockit customers do not need to

SQL性能优化(efficacious )

跟風遠走 提交于 2019-11-26 12:46:55
1、优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标 2、优化方法 一、改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是 改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据 ,以达到 “ 减少 IO 次数 ” 和 “ 降低 CPU 计算 ” 的目标 常见误区 (1)count(1)和count(primary_key) 优于 count(*) X 很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差