Redis基础
Redis
面经整理,主要是理论知识
Redis基本数据类型
key是字符串,value是5种:String、List、Hash、Set、Zset
String:是SDS(Simple Dynamic String),动态字符串,可修改,最长512M。
扩展:为什么不用c语言的字符串?Redis如何解决
多增加了字符串长度属性len:c语音中的字符串末尾有’\0’,并且获取长度是O(N)级别的。SDS只需O(1)
自动扩展空间:由于字符串经常会进行拼接操作,所以没有提取获取长度,可能会造成缓存区溢出。当 SDS 需要对字符串进行修改时,首先借助于 len 和 alloc 检查空间是否满足修改所需的要求,如果空间不够的话,SDS 会自动扩展空间,避免了像 C 字符串操作中的覆盖情况;
有效降低内存分配次数:SDS优化了修改字符串带来的内存重分配的次数,采用空间预分配(会分配多余的free空间)和惰性空间释放(缩减字符串后不会马上释放空间)
二进制安全:因为存了长度,不用去判断空字符\0
List:相当于Java的LinkedList,插入删除O(1),索引定位 ...
JVM学习随笔
JVM的架构模型
JAVA编译器输入的指令流基本是一种基于栈的指令集架构,另一种架构是基于寄存器的。
两者的区别:
基于栈式架构的特点
设计和实现更简单,适用于资源受限的系统,比如嵌入式。
避开了寄存器的分配难题:采用零地址指令方式分配。(零地址就是只有操作码,没有地址字段,因为栈的话只对栈顶进行操作,就不需要地址)
指令流中的指令大部分是零地址指令,执行过程依赖操作栈。指令集更小,编译器容易实现。
不需要硬件支持,可移植性更好,更好实现跨平台
基于寄存器架构的特点
指令集完全依赖于硬件,可移植性差。
性能优秀、执行高效
花费更少的指令来完成一项操作
在大部分情况下,采用一地址指令、二地址指令和在地址指令为主。
JVM的生命周期
虚拟机的启动:Java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建一个初始类(initial calss)来完成的,这个类是由虚拟机的具体实现指定的。
虚拟机的执行:
任务:执行Java程序
程序开始执行时它才运行,程序结束它就停止
执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚 ...
Java基础
重新看看Java基础
顺便随便记一些基础的东西。。😃
数据类型
基本类型:4种整型、两种浮点类型、1中用于表示Unicode编码的字符型char和boolean型
整型:int、short、long、byte
浮点型:float、double
注意:浮点型存在舍入误差,有些小数无法精确表示,如果在数值计算时不允许有误差,可以考虑使用BigDecimal类
char类型:用单引号括起来
boolean:两个值:true和false
在c++中,可以使用数值0表示布尔值false,非0相当于布尔值true;但Java中不行,编译不能通过
final
关键字final指示常量。
final表示这个变量只能被赋值一次。一旦被赋值后,就不能改变。
常量名一般使用全大写。
类常量可以使用static final来设置,定义位于main方法外,同一个类中的方法都可以使用。
枚举类型
Scanner类
从键盘输入数据。
导包:import java.util.Scanner
创建对象:Scanner sc = new Scanner(System.in)
使用:参数类型 ...