Redis一、Redis为什么快 (内存操作)因为Redis将所有的数据存储在内存中,可以快速读取和写入数据,而不需要像传统数据需要从磁盘读取数据。 (数据结构简单)Redis支持多种数据结构,包括字符串,哈希表、列表,集合和有序集合等。 (单线程模型)Redis使采用了单线程的模型,避免了多线程并发带来的竞争和线程切换的开销,提高性能。 (非阻塞I/O)Redis使用非阻塞I/O模型,可以等待I/O操作完成时处理其他请求,提高了并发的处理能力。 (持久化机制)Redis支持两种持久化的操作,RDB和AOF,可以在服务器崩溃时快速的恢复数据。 (高效的网络通信)Redis使用自己的协议进行网络通信,协议简单,高效,可以快速的传输数据。 (原子操作)Redis支持原子操作,可以确保多个操作的原子性,避免了并大的数据的不一致性的问题。 Redis之所以快是因为它采用了内存存储和非阻塞的I/O模型,避免了磁盘IO的延迟;同时,Redis使用了IO多路复用技术,通过一个线程同时处理多个客户端请求,减少了线程切换的开销,提高了并发处理能力。 二、Redis可以用来做什么 缓存:Redi ...
设计模式一、单例模式的几种写法懒加载-懒汉模式 123456789101112131415161718public class Singleton { private volatile static Singletoninstance; private Singleton() { } public static Singleton getInstance() { if (instance==null) { //第一次检查 synchronized (Singleton.class) { if (instance==null) { //第二次检查 instance=new Singleton(); } } } return instance; }} ...
线程和锁一、线程的状态在java中,线程的状态可以通过Tread类中getState()方法进行获取。以下是Java开发中常见的线程状态: 1、New(新建): 线程创建但未被启动。 2、RUNNABLE(可运行):线程可以在任意时刻运行。处于这个状态的线程可能正在运行,也可能正在等待CPU分配时间片。 3、BLOCKED(阻塞):线程被阻止执行,因为它正在等待监视器锁定。其他线程正在占用所需的锁定,因此线程被阻塞。 4、WAITING(等待):线程进入等待状态,直到其他线程显式地唤醒它。线程可以调用Object类的wait()方法、join()方法或Lock类的条件等待方法进入此状态。 5、TIMED_WAITING(计时等待):线程进入计时等待状态,等待一段指定的时间。线程可以调用Thread.sleep()方法、Object类的wait()方法、join()方法或Lock类的计时等待方法进入此状态。 6、TERMINATED(终止):线程完成了其任务,或者因为异常或其他原因而终止运行。 以上是Java开发中线程的常见状态。线程可以根据业务逻辑和操作系统的调度来在不同状态之间转换。 ...
一、Java常用的集合、分类、涉及到的接口 List Set Map Queue 定义 一个有序集合,允许重复元素 一个无序集合,不允许重复的元素 由键值对组成的集合,键和值可以都是任意对象 一种特殊的集合,按照特定规则进行元素插入和明除 存储 以索引方式维护元素顺序 不维护元素顺序 使用键值唯一标识和访问值 依据某种策略保持元素顺字 可重复性 允许重复元素 不允许重复元素 键不允许重复,值允许重复 允许重复元素 实现类 ArrayList、LinkedList、Vetcor等 HashSet、LinkedHashSet、TreeSet等 HashMap、LinkedHashMap、TreeMap等 LinkedList、PriorityQueue等 遍历 可使用索遍历或者使用迭代器遍历 可以使用迭代器遍历 可以通过键或Entry遍历 通常按照特定顺序遍历 查找 根据索引位置或具体元素进行查找 根据元素进行查找 通过键查找值,可以使用containsKey和containsValue方法 通常按照某种策略进行查找 应用场景 需要按照顺序存储元素, ...
Java面试题基础1. String/StringBuffer/StringBuilder区别 特性 String StringBuffer StringBuilder 可变性 不可变 可变 可变 线程安全 线程安全 线程安全 非线程安全 性能 低效,每次操作都会创建新的字符串对象 中等效率,操作时候不会创建新的字符串对象 高效,操作时候不会创建新的字符串对象 内存占用 每次拼接字符串会创建新的对象,占用更多内存 内部使用字等数组实现,占用较少内存 内部使用字符数组实现,占用较少内存 适用场景 字符串不经常被修改、拼接较少的情况 多线程环境下或频繁拼接字符串的场景 单线程环境下频繁拼接字符串的场景 第一点: 可变和适用范围。String对象是不可变的,而StringBuffer和StringBuilder是可变字符序列。每次对String的操作相当于生成一个新的String对象,而对StringBuffer和StringBuilder的操作是对对象本身的操作,而不会生成新的对象,所以对于频繁改变内容的字符串避免使用String,因为频繁的生成对象 ...
学习笔记
未读which命令which命令用于标识在终端提示符下键入可执行文件名称或命令时执行的给定可执行文件的位置,该命令在PATH环境变量中列出的目录中搜索作为参数指定的可执行文件。 语法1which [options] COMMAND 参数 --version, -[vV]: 输出版本信息。 --help: 输出帮助信息。 --skip-dot: 跳过PATH中以.开头的目录。 --skip-tilde: 跳过PATH中以~开头的目录。 --show-dot: 不要在输出中将.扩展到当前目录。 --show-tilde: 为非root用户输出HOME目录的波浪号。 --tty-only: 如果不在tty上,则停止处理右侧的选项。 --all, -a: 打印PATH中的所有匹配项,而不仅仅是第一个。 --read-alias, -i: 从标准输入中读取别名列表。 --skip-alias: 忽略选项--read-alias,不要读标准输入。 --read-functions: 从标准输入读取shell函数。 --skip-functions: 忽略选项--read-functions,不要读标 ...
学习笔记
未读journalctl命令journalctl命令是Systemd日志系统的一个命令,主要用途是用来查看通过Systemd日志系统记录的日志,在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd取代了initd之后便开始统一管理了所有Unit的启动日志,可以只用一个journalctl命令,查看所有内核和应用的日志。 语法1journalctl [OPTIONS...] [MATCHES...] 参数 --no-full, --full, -l: 当字段匹配可用列时将其省略,默认设置是显示完整字段,允许它们换行或被截断,旧的选项-l/--full不再有用,除了撤销--no-full。 -a, --all: 完整显示所有字段,即使它们包含不可打印字符或非常长。 -f, --follow: 仅显示最近的日志条目,并在新条目附加到日志时连续打印。 -e, --pager-end: 立即跳到日志的结尾内隐含的工具,这意味着-n 1000可以保证分页器不会缓冲大小不受限制的日志,可以在命令行中使用显式的-n和其他一些数值来覆盖它,注意,这个选项只支持less页。 - ...
学习笔记
未读一、带你了解Linux系统1.1 Linux系统的文件结构🎉12345678910111213141516171819/bin 二进制文件,系统常规命令/boot 系统启动分区,系统启动时读取的文件/dev 设备文件/etc 大多数配置文件/home 普通用户的家目录/lib 32位函数库/lib64 64位库/media 手动临时挂载点/mnt 手动临时挂载点/opt 第三方软件安装位置/proc 进程信息及硬件信息/root 临时设备的默认挂载点/sbin 系统管理命令/srv 数据/var 数据/sys 内核相关信息/tmp 临时文件/usr 用户相关设定 1.2 Linux系统命令行的含义123456示例:root@app00:~# root //用户名,root为超级用户@ //分隔符app00 //主机名称~ ...
Git的介绍 [toc] 1.1、什么是GitGit 是一个开源的分布式版本控制系统。 分布式 : 你的文件可以存放在多个不同的系统(或者位置),相互之间来自于一个 原本,单个副本修改,不影响其他副本。 但是可以通过从一个指定地方(比如Github,或者自己构建的gitlab)上传与拉取来获得更新。 版本控制系统: 顾名思义 相比于 集中式版本控制系统,他更小巧,更快捷,更方便。 不依赖中央服务器,本质上继承了他的创造者的 一切皆文件的想法。 其实他就是你随处可以带走的文件,只不过加了一套逻辑,可以配合Git来控制,从而进行版本控制。 1.2、Git的安装Linux下安装123456Linux 下使用如下命令安装sudo yum install git //适用于 RedHat 系的 Linux或者sudo apt-get install git //适用于 Ubuntu 系的 Linux或者sudo apt-get install git-core //适用于 老版本 Ubuntu 系的 Linux 一般情况下当下的Linux都自带了 git 对于 ...
JavaEE基础语法学习笔记 1.Java的变量与常量使用类似于C#,Java的所有变量和函数都要定义在class中 (1)Java内置数据类型:类型 字节数 举例byte 1 123short 2 12345int 4 123456789long 8 1234567891011Lfloat 4 1.2Fdouble 8 1.2, 1.2Dboolean 1 true, falsechar 2 ‘A’ (2)Java常量使用:使用final修饰 举例: final int N = 110; 2.Java类型转化(1)显示转化:举例: int x = (int)’A’; (3)隐式转化:举例: double x = 12, y = 4 * 3.3; 3.表达式与C++、Python3类似,包括+,-,*,/,%等算数运算符, &,|等位运算符, &&,||等逻辑运算符 举例:int a = 1, b = 2, c = 3;int x = (a + b ...