🧱 后端开发与架构
未读获取环境变量12System.getenv("PATH");System.getenv("JAVA_HOME"); 获取系统属性12345System.getProperty("pencil color"); // 得到属性值java -Dpencil color=greenSystem.getProperty("java.specification.version"); // 得到 Java 版本号Properties p = System.getProperties(); // 得到所有属性值p.list(System.out); String Tokenizer12345678// 能够同时识别, 和 |StringTokenizer st = new StringTokenizer("Hello, World|of|Java", ", |");while (st.hasMoreElements()) { st.nextToke ...
🧱 后端开发与架构
未读equals 的写法12345678public boolean equals(Object o){ if(this == o) return true; if(o == null) return false; if(!o instanceof strudent) return false; student s = (student)o; if(s.name.equals(this.name) && s.age == this.age) return true; else return false;} 说说 & 和 && 的区别.& 和 && 都可以用作逻辑与的运算符, 表示逻辑与(and), 当运算符两边的表达式的结果都为 true 时, 整个运算结果才为 true, 否则, 只要有一方为 false,则结果为 false.&& 还具有短路的功能, 即如果第一个表达式为 false, 则不再计算第二个表达式, 例如, 对于 if(str ! ...
🧱 后端开发与架构
未读Java 集合 Collection List LinkedList ArrayList CopyOnWriteArrayList Vetor Stack Set HashSet LinkedHashSet TreeSet CopyOnWriteArraySet Map ConcurrentHashMap ConcurrentShipListMap EnumMap HashMap HashTable LinkedHashMap Properties TreeMap WeakHashMap 单线程集合ListArrayList 底层基于泛型数组 它允许所有元素,包括 null ArrayList 实际上是通过一个数组去保存数据的。当我们构造 ArrayList 时;若使用默认构造函数,则 ArrayList 的默认容量大小是 10。 当 ArrayList 容量不足以容纳全部元素时,ArrayList 会重新设置容量:新的容量 =“(原始容量 x3)/2 + 1”。 ArrayList 的克隆函数,即是将全部元素克隆到一个数组中。 Ar ...
🧱 后端开发与架构
未读serializable 的意义 比如说你的内存不够用了, 那计算机就要将内存里面的一部分对象暂时的保存到硬盘中, 等到要用的时候再读入到内存中, 硬盘的那部分存储空间就是所谓的虚拟内存.在比如过你要将某个特定的对象保存到文件中, 我隔几天在把它拿出来用, 那么这时候就要实现 Serializable 接口; 在进行 java 的 Socket 编程的时候, 你有时候可能要传输某一类的对象, 那么也就要实现 Serializable 接口;最常见的你传输一个字符串, 它是 JDK里面的类, 也实现了 Serializable 接口, 所以可以在网络上传输. 如果要通过远程的方法调用(RMI)去调用一个远程对象的方法, 如在计算机 A 中调用另一台计算机 B 的对象的方法, 那么你需要通过 JNDI 服务获取计算机B 目标对象的引用, 将对象从 B 传送到 A, 就需要实现序列化接口. 例如: 在 web 开发中, 如果对象被保存在了 Session 中, tomcat 在重启时要把 Session 对象序列化到硬盘, 这个对象就必须实现 Serializable 接口. 如果 ...
🛠️ 开发工具与插件
未读.gitignore 规则写法.gitignore 文件用于指定哪些类型的文件应被 Git 忽略。以下是一些常用的忽略规则: 在已忽略文件夹中不忽略特定的子文件夹: 12/node_modules/*!/node_modules/layer/ 在已忽略文件夹中不忽略特定的文件: 12/node_modules/*!/node_modules/layer/layer.js 注意:要使这些规则生效,被忽略的文件或目录需要以 /* 结尾。此外,请参考以下规则写法: 以斜杠 / 开头表示目录; 星号 * 可匹配多个字符; 问号 ? 匹配单个字符; 方括号 [] 内包含单个字符的匹配列表; 大叹号 ! 表示不忽略(跟踪)匹配到的文件或目录; 取消跟踪已版本控制的文件你可以使用 git update-index --assume-unchanged <file> 命令来取消对一个文件的跟踪。这适用于你希望暂时停止 Git 监控特定文件变动的情况。 1git update-index --assume-unchanged your_file_path 从版本库中 ...
🛠️ 开发工具与插件
未读新建代码库在开始任何项目前,我们通常需要创建一个新的代码库。这可以通过以下方式完成: 123456# 在当前目录创建新的git仓库$ git init# 初始化一个新目录作为Git代码库(如果这个目录已存在)$ git init [project-name]# 克隆远程代码库至本地$ git clone [url] 注意事项: 请确保选择合适的位置和项目名称,避免与现有文件或目录冲突。 如果要克隆一个项目,请确认你有访问权限以及所选 URL 是正确的。 配置配置 Git 有助于确保你在提交时信息准确且一致: 1234567# 查看当前Git的全局配置$ git config --list# 编辑本地或全球的gitconfig文件$ git config -e [--global]# 设置提交代码时的基本用户信息(推荐使用--global)$ git config [--global] user.name "[name]"$ git config [--global] user.email "[email address]" 注意事项 ...
🖥️ 基础设施与运维
未读在 Ubuntu 系统的使用过程中,熟练掌握图形界面与命令行模式的切换,以及配置 SSH 服务是非常有用的技能。下面我将分享一些基本的操作步骤,帮助 Ubuntu 初学者们更好地管理自己的系统。 图形界面与命令行模式切换在 Ubuntu 系统中,你可以通过以下快捷键在图形界面和命令行模式之间进行切换: 切换到命令行模式:使用 Ctrl + Alt + F2 到 F6。每个组合键会打开一个新的命令行界面。 切换回图形界面:使用 Ctrl + Alt + F7。 安装 openssh-server为了能够远程登录到你的 Ubuntu 系统,你需要安装 openssh-server。 首先,更新你的系统包列表:1sudo apt-get update 接着,安装 openssh-server:1sudo apt-get install openssh-server 查看和开启 SSH 服务安装完成后,你可以检查 SSH 服务是否已经开启。 查看当前运行的进程,确认 SSH 服务是否在运行:1sudo ps -e | grep ssh 如果 SSH 服务没有运行,你可以通过以 ...
🧱 后端开发与架构
未读什么是泛型泛型就是变量类型的参数化。在使用泛型前,存入集合中的元素可以是任何类型的,当从集合中取出时,所有的元素都是 Object 类型,需要进行向下的强制类型转换,转换到特定的类型。而强制类型转换容易引起运行时错误。泛型类型参数只能被类或接口类型赋值,不能被原生数据类型赋值,原生数据类型需要使用对应的包装类。 不适用泛型 123456789101112131415161718192021222324252627282930class Test { private Object ob; // 定义一个通用类型成员 public Test(Object ob) { this.ob = ob; } public Object getOb() { return ob; } public void setOb(Object ob) { this.ob = ob; } public void showTyep() { ...
🛠️ 开发工具与插件
未读Git 是一种分布式版本控制系统,它广泛用于软件开发和项目管理领域,提供了一个简单高效的工具来跟踪文件的修改记录,并允许多个开发者协作。本文档将从基础知识开始介绍,逐步深入到高级用法。 1. 安装 GitLinux:在大多数 Linux 发行版中可以直接通过包管理器安装 Git。 1sudo apt-get update && sudo apt-get install git #对于Debian/Ubuntu用户 或者 1sudo yum install git #对于CentOS/RHEL用户 Windows 和 macOS:建议从官网下载 Git 最新版本的安装程序进行安装:https://git-scm.com/downloads 2. 配置 Git在第一次使用前,需要配置你的用户名和邮箱。这是重要的识别信息。 12git config --global user.name "Your Name"git config --global user.email you@example.com 可以查看已有的配置: 1git confi ...
🖥️ 基础设施与运维
未读Nginx(发音为 “Engine-X”)是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3 代理服务器。由俄罗斯工程师 Igor Sysoev 开发,最早发布于 2004 年。Nginx 的轻量和高并发处理能力让它在高流量网站中迅速流行,目前被广泛用于各类服务器环境中。 为什么选择 Nginx?Nginx 具有以下主要优势: 高并发性能:Nginx 采用事件驱动(异步)的非阻塞架构,能够高效处理成千上万的并发连接,特别适合高流量应用。 资源效率:与其他服务器(如 Apache)相比,Nginx 占用的内存和 CPU 资源更少,提供更好的资源利用率。 功能丰富:Nginx 支持静态文件服务、反向代理、负载均衡、缓存、SSL/TLS 加密等功能,适用多种场景。 高度可扩展:Nginx 支持模块化配置,可通过模块扩展功能。其配置文件简单明了,便于管理和扩展。 Nginx 的应用场景Nginx 具备多种应用场景,常见的包括: 静态文件服务器:适合静态内容(如 HTML、CSS、JavaScript、图片和视频)的高效分发。 反向代理 ...
📊 数据与搜索
未读1. SQL 连接操作简介在数据库查询中,JOIN 操作是一种非常强大的工具。它允许我们将来自不同表的数据结合起来。下面是几种常见的 JOIN 类型及其用途: INNER JOIN(内连接):返回两个表中匹配的行。 LEFT JOIN(左连接):返回左表所有记录,右表无匹配时返回 NULL。 RIGHT JOIN(右连接):返回右表所有记录,左表无匹配时返回 NULL。 2. 使用 CASE WHEN 在 SQL 中处理条件逻辑在 SQL 查询中,CASE WHEN 是一种强大的工具,它允许你在查询结果中根据特定条件添加不同的值。以下是一个示例: 1234567SELECT *, CASE WHEN (A - B) = 0 THEN 'T' WHEN (A - B) < 0 THEN 'WRONG' ELSE CASE WHEN (A IS NULL OR B IS NULL) THEN 'F' ELSE 'T' EN ...
🖥️ 基础设施与运维
未读通过端口号获取对应的 PID1/usr/sbin/lsof -n -P -t -i :$TOMCAT_WEB_PORT 根据名称获取 PID1234ps -ef | grep -w java | grep -v grep | awk '{print $2}'-w 全匹配名字-v 忽略名字 tar123.tar.gz 和 .tgz解压:tar zxvf FileName.tar.gz压缩:tar zcvf FileName.tar.gz DirName shell 执行多个命令 每个命令之间用 ; 隔开说明:各命令的执行给果,不会影响其它命令的执行。换句话说,各个命令都会执行,但不保证每个命令都执行成功。 每个命令之间用 && 隔开说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。 每个命令之间用 || 隔开说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止 查看历史命令1history | awk '&# ...
🧩 开发框架与中间件
未读Spring Boot 为什么建议将 main 类放在所有类所在包的顶层 通常建议将应用的 main 类放到其他类所在包的顶层 (root package),并 将 @EnableAutoConfiguration 注解到你的 main 类上,这样就隐式地定义了一个 基础的包搜索路径(search package),以搜索某些特定的注解实体(比如 @Service,@Component 等) 。例如,如果你正在编写一个 JPA 应用,Spring 将 搜索 @EnableAutoConfiguration 注解的类所在包下的 @Entity 实体。 采用 root package 方式,你就可以使用 @ComponentScan 注解而不需要指 定 basePackage 属性,也可以使用 @SpringBootApplication 注解,只要将 main 类放到 root package 中。 @SpringBootApplication 等同于以默认属性使用一下注解: @EnableAutoConfiguration @ComponentScan 扫描所有 Sprin ...
🧱 后端开发与架构
未读volatile 关键字的 2 层含义: 用 volatile 修饰的变量,线程在每次使用变量的时候,都会读取变量修改后的最新的值.作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值. 可见性可见性是指 当一个线程修改了一个共享变量,其他线程能够立刻得知这个修改.这里有必要了解一下 Java 的内存模型 被 volatile 修饰的变量,当线程需要使用这个变量时,回去主内存中读取,然后加载到自己的工作线程中,工作线程中的变量只是主存变量的一个拷贝,当使用完这个变量后,会刷新会主存中. 当数据中主内存复制到工作内存存储时,必须出现两个动作: 由主内存执行的 read 操作 有工作内存执行相应的 load 操作 当数据从工作内存拷贝到主内存时,也会有两个操作: 用工作内存执行的 store 操作 用主内存执行相应的 write 操作 volatile 的特殊规则就是 read、load、use 必须连续出现。assign、store、write 动作必须连续出现。所以使用 volatile 变量能够保证必须先从主内存刷新最新的值,每次修改后必须 ...















