内存类型

程序员面试备战篇:18个经典MySQL面试专题解析,干货分享

蓝咒 提交于 2019-11-28 04:21:22
1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。>所以第三范式具有如下特征:>>1. 每一列只有一个值 >>2. 每一行都能区分。>>3. 每一个表都不包含其他表已经包含的非主关键字信息。 2.有哪些数据库优化方面的经验? 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等4. UNION ALL 要比UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNIONALL。>>UNION 和

Netty学习(三)高性能之ByteBuf(篇幅较长)

可紊 提交于 2019-11-28 02:46:10
Netty 高性能之ByteBuf Netty 高性能的原因除了前面提到的 NIO 的 Reactor 线程模型, 零拷贝也是其高性能的一个重要原因. 零拷贝 省去了数据从用户进程到内核的拷贝(jvm 堆内的数据 os 是不能直接使用的, 要让os可以使用的话, 需要将堆内的数据拷贝一份到堆外) CompositeByteBuf 复合多个 ByteBuf, netty使用的是逻辑上的关联, 对外提供访问的统一接口, 而不是重新申请内存再将数据写入新的 ByteBuf Netty 的 ByteBuf 类型 Pooled(池化)、Unpooled(非池化) Direct(直接缓冲区/堆外)、Heap(jvm堆内) unsafe(unsafe 调用的本地方法)、safe(一般也不会这么说, 这是相对于 unsafe, 指的jvm 堆内的操作) Netty 默认都会优先使用 unsafe 的实现, 池化/非池化(Pooled/Unpooled): Netty 先申请一块连续的空间作为 ByteBuf 池, 需要用到的时候直接去池里面取, 用完之后返还给 ByteBuf 池, 而不需要每次要用 ByteBuf 的时候都去申请. 堆外对象的创建比堆内的耗时. 总结: 池化的作用就是加快程序获取到操作的对象 堆外/堆内(direct/heap): 堆内指的在 JVM 中的数据,申请

并发编程与高并发解决方案(一):并发编程相关基础知识

人走茶凉 提交于 2019-11-28 01:49:53
并发编程与高并发解决方案(一):并发编程相关基础知识 【原文链接】 www.ronglexie.top 目录 基本概念 CPU多级缓存 CPU多级缓存-缓存一致性协议(MESI) MESI协议中的状态 MESI状态转换图 CPU多级缓存-乱序执行优化 Java内存模型(JMM) JVM对Java内存模型的实现 硬件内存架构 Java内存模型和硬件架构之间的桥接 共享对象的可见性 竞争现象 支撑Java内存模型的基础原理 指令重排序 数据依赖性 as-if-serial语义 内存屏障(Memory Barrier) happens-before原则 Java内存模型中线程和主内存的抽象关系 Java内存模型中同步的操作与规则 同步操作 同步规则 并发的优势与风险 基本概念 并发(Concurrency):并发是指同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时”存在“的,每个线程都处理执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器上,因此可以同时运行。 高并发(High Concurrency):高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 CPU多级缓存 CPU多级缓存配置(演变): 数据的读取和存储都经过高速缓存

Java基础知识点梳理(详细)

人盡茶涼 提交于 2019-11-28 00:40:40
基本数据类型 Java内置8种基本类型 -> 6种数字类型 -> 4种整数类型: byte, short, int, long ​ -> 2种浮点类型: float, double ​ -> 1种布尔类型: boolean ​ -> 1种字符类型: char (类型大小写注意,比如boolean是原始数据类型,Boolean是对应的封装对象) 数据类型特征表 类型 位数 最小值 最大值 默认值 其他 byte 8 -128(-2^7) 127(2^7-1) 0 有符号、二进制补码表示 short 16 -32768(-2^15) 32767(2^15-1) 0 有符号、二进制补码表示 int 32 -2^31 2^31-1 0 有符号、二进制补码表示 long 64 -2^63 2^63-1 0L(0l) 有符号、二进制补码表示 float 32 2^(-149) 2^128-1 0.0f 单精度、IEEE754标准 double 64 2^(-1074) 2^1024-1 0.0d 双精度、IEEE754标准 char 16 \u0000(0) \uffff(65535) \u0000(0) 单一的、Unicode字符 浮点数内存结构 类型 位数 符号位 指数位 尾数位 float 32 1 8 23 double 64 1 11 52 原始数据类型对应的封装对象 (byte,

深入Delphi下的DLL编程

夙愿已清 提交于 2019-11-28 00:24:32
深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”。尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心,没有驱动损坏,没有病毒侵扰,仍然在使用(安装)了一段时间软件后,发现windows系统越来越庞大,操作越来越慢,还不时的出现曾经能使用的软件无法使用的情况,导致最终不得不重装系统。这种情况常常是由于dll文件的大量安装和冲突造成的。这一方面说明DLL的不足,另一方面也说明DLL的重要地位,以至我们无法杜绝它的使用。 DLL(动态链接库,Dynamic Link Library)简单来说是一种可通过调用执行的已编译的代码模块。DLL是windows系统的早期产物。当时的主要目的是为了减少应用程序对内存的使用。只有当某个函数或过程需要被使用时,才从硬盘调用它进入内存,一旦没有程序再调用该DLL了,才将其从内存中清除。光说整个windows系统,就包括了成百上千个dll文件,有些dll文件的功能是比较专业(比如网络、数据库驱动)甚至可以不安装的。假如这些功能全部要包括在一个应用程序(Application program)里,windows将是一个数百M大小的exe文件。这个简单的例子很容易解释DLL的作用,而调用DLL带来的性能损失则变得可被忽略不计。 多个应用程序调用同一个DLL

redis(一)redis内存模型

六眼飞鱼酱① 提交于 2019-11-27 23:55:15
本文转载自: https://www.cnblogs.com/kismetv/p/8654978.html#t1 redis内存统计 在客户端通过redis-cli连接服务器后(后面如无特殊说明,客户端一律使用redis-cli),通过info命令可以查看内存使用情况: 127.0.0.1:6379> info memory # Memory used_memory:2132344 used_memory_human:2.03M used_memory_rss:5607424 used_memory_rss_human:5.35M used_memory_peak:2275152 used_memory_peak_human:2.17M used_memory_peak_perc:93.72% used_memory_overhead:2075094 used_memory_startup:791264 used_memory_dataset:57250 used_memory_dataset_perc:4.27% allocator_allocated:2134144 allocator_active:2404352 allocator_resident:5029888 total_system_memory:1745100800 total_system_memory

Amazon EC2 实例类型

江枫思渺然 提交于 2019-11-27 21:49:43
https://aws.amazon.com/cn/ec2/instance-types/ 通用 通用实例提供计算、内存和联网资源三方面的平衡,可用于各种不同的工作负载。这些实例非常适合于以相同比例使用这些资源的应用程序,如 Web 服务器和代码存储库。 A1 T3 T3a T2 M5 M5a M4 Amazon EC2 A1 实例 可以显著节省成本,非常适合广泛的 Arm 生态系统所支持的横向扩展和基于 Arm 的工作负载。A1 实例是最先采用 AWS Graviton 处理器的 EC2 实例,这些处理器配备 64 位 Arm Neoverse 内核和 AWS 设计的自定义硅片。 功能: 定制的 AWS Graviton 处理器,带有 64 位 Arm Neoverse 内核 支持高达10 Gbps 网络带宽的增强型网络 默认情况下已经过 EBS 优化 由 AWS Nitro 系统 (专用硬件和轻量级管理程序的组合)提供支持 型号 vCPU 内存 (GiB) 存储 网络性能 (Gbps) a1.medium 1 2 仅限 EBS 最高 10 a1.large 2 4 仅限 EBS 最高 10 a1.xlarge 4 8 仅限 EBS 最高 10 a1.2xlarge 8 16 仅限 EBS 最高 10 a1.4xlarge 16 32 仅限 EBS 最高 10

delphi两个取字串长度的函数strlen,length

落爺英雄遲暮 提交于 2019-11-27 21:28:08
━━━━━━━━━━━━━━━━━━━━━━━━━━ 【strlen】PChar 串专用函数:串长度 procedure TForm1.BitBtn1Click(Sender: TObject); var s: Widestring; begin s := '桂枝香在故国晚秋'; ShowMessage(IntToStr(Length(String(s))));//结果不是8而是16 end; ━━━━━━━━━━━━━━━━━━━━━━━━━━ 如果想得到8: ShowMessage(IntToStr(Length(s)));//结果不是16而是8 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 【length】Length (S): Integer; 返回参数字符串的长度。   AnsiString这是Pascal缺省的字符串类型,它由AnsiChar字符组成,其长度没有限制,同时与null结束的字符串相兼容。   在大多数情况下,AnsiString类型能被用成PChar,应该尽可能地使用AnsiString,因为它对字符串内存的管理是自动,极大地减少了应用程序中内存混乱的错误代码,因此,要尽可能地避免用PChar类型以及对它相应进行人工分配内存。 来源: https://www.cnblogs.com/jijm123/p/11377966.html

指针与强制类型转换

≯℡__Kan透↙ 提交于 2019-11-27 17:57:31
指针与强制类型转换 1、变量的数据类型的含义 (1)、所有的类型的数据存储在内存中,都是按照二进制格式存储的。所以内存中只有0和1,不知道是int的还是float的 或者是其它类型的。 (2)、int、char、short等属于整形,他们的存储方式(数据转换成二进制往内存中放的方式)是相同的,只是内存格子 的大小不同而已(所以这几种整形就彼此叫二进制兼容格式);而float和double的存储方式彼此不同,和整形更不同。 (3)、int a = 5;编译器给a分配4字节空间,并且将5按照int类型的存储方式转成二进制存到a所对应的内存空间中去(a 做左值的);我们printf去打印a的时候(a此时做右值),printf内部的vsprintf会按照格式化字符串(就是printf传参 的第一个字符串中的%d之类的东西)所代表的类型去解析a所对应的内存空间,解析出来的值用来输出。也就是说,存进去 时是按照这个变量本身的数据类型来存储的(譬如本例中a为int,所以按照int格式来存储);但是取出来时是按照printf 中%d之类的格式化字符串的格式来提取的。此时虽然a所代表的内存空间中的二进制序列(比如101010并没有改变),但是 怎么理解(怎么把这些二进制数转换成数字)就不一定了。譬如我们用%d来解析,那么还是按照int格式解析,那么值自然 是5;但是如果用%f来解析

Java内存管理机制

时间秒杀一切 提交于 2019-11-27 16:56:12
对于从事 C/C++ 程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的帝皇,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。 对于 Java 程序员来说,在虚拟机的自动内存管理机制的帮助下,不在需要为每一个 new 操作去写配对的 delete/free 代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过也正是因为 Java 程序员把内存控制权交给了 Java 虚拟机,一旦出现内存泄漏和溢出的问题,如果不了解虚拟机怎样使用内存的,那排查错误将会成为一项异常艰难的工作。 1. 什么是 JVM? JVM(Java 虚拟机)是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM 有自己的硬件架构,如处理器、堆栈、寄存器等,还有对应分指令系统。 假如一个程序使用的内存区域是一个货架,那 JVM 就相当于是一个淘宝店铺,它不是真实存在的货架,但它和真实货架一样可以上架和下架商品,而且上架的商品数量也是有限的。 假如货架是在深圳,那 JVM 的平台无关性就相当于是客人可以在各个地方购买你在淘宝上发布的商品,不是只有在深圳才能购买货架上的商品。 2. 什么是 Java 内存模型? Java