简易 开发基础点记录
个人学习记录
1. 查看是centos多少
cat /etc/redhat-release
2. 查看系统内核版本
cat /proc/version
3. 查看内存总数
cat /proc/meminfo | grep MemTotal
4. 查看磁盘空间
df -hl
5. 查看docker版本
docker-v
6. 查看docker-compsoe 版本
docker-compose -v
7. 查看oracle版本
select * from v$version
8. 查看多少个逻辑cpu :
cat /proc/cpuinfo |grep "processor"|wc -l
9. 查看多少个物理CPU:
grep 'physical id' /proc/cpuinfo | sort -u|wc -l
10. 查看核心的数量:
grep 'core id' /proc/cpuinfo | sort -u | wc -l
11. 查看CPU内核频率:
cat /proc/cpuinfo |grep MHz|uniq
12. 查看CPU数量:
lscpu |grep "Socket" |awk '{print $NF}'
13. 查询CPU核数:
cat /proc/cpuinfo | grep "cpu cores" | uniq
14. 查询Linux的主机名称
hostname
15. 查询Linux IP
hostname -i
----------------------------------------------------
16. 查看当前占用某个端口的进程ID
netstat -ntulp | grep 端口号 (win 使用netstat -aon|findstr 端口号)
17. 删除进程
kill -9 进程ID (win 使用taskkill /f /pid 进程ID)
18. 后台运行jar包
nohup java -jar xxx.jar & 或者 java -jar xxx.jar & (nohup有日志输出,如果本身已经有日志输出,可直接使用&【linux】,如果是【windows】用start java -jar xxx)
19. 后台运行jar包时传参自定义变量(指定启动端口时比较特别,java -jar -Dserver.port=端口号 xxx.jar &)
nohup java -jar xxx.jar --xxx.xxx=aaa &
20. docker停止容器
docker stop 容器ID
21. docker运行停止的容器
docker start 容器ID
22. docker重启运行的容器
docker restart 容器ID
(重启docker本身时,sudo systemctl restart docker)
23.docker-compsoe运行容器
docker-compose up -d
24. 进入docker容器内部
docker exec -it 容器ID bash ( docker exec -it 容器ID /bin/bash; docker exec -it 容器ID /bin/sh;docker exec -it 容器ID /bin/csh)
25. docker查看容器的日志(指定时间、容器ID和日志名称)
docker logs -t --since="2021-11-01T00:00:00" --until "2021-11-01T10:00:00" 容器ID > 日志文件名称.log
ps: since和until为时间,时间格式有时不同;容器ID不写全也行,只要能在当前运行容器中能区分即可,导出日志文件格式没有要求,常使用.log
26. docker实时查看当前指定行数日志
docker logs -f --tail=10 容器ID
27. docker导出容器的日志(指定时间、容器ID和日志名称)
docker logs -t --since="2021-11-01T00:00:00" --until "2021-11-01T10:00:00" 容器ID > 日志文件名称.log
ps: since和until为时间,时间格式有时不同;容器ID不写全也行,只要能在当前运行容器中能区分即可,导出日志文件格式没有要求,常使用.log
28. 根据Dockerfile文件构建镜像
docker build -t 镜像名称(:镜像Tag) . (默认查找当前路径下的Dockerfile文件)
docker build -f Dockerfile -t 镜像名称(:镜像Tag) . (指定Dockerfile文件)
29. docker查看列表
docker ps (运行中的容器列表)
docker ps -a (所有的容器列表)
docker images (镜像列表)
docker rm 容器ID (删除容器)
docker rmi 镜像ID (删除镜像)
30. gradle 项目打包
gradle build -Pprod -x test (build/libs文件夹下)
IDEA右侧gradle菜单->项目名->Tasks->build->bootWar (取决于配置,打成war或jar)
such as

such as apply plugin: 'war' bootWar { mainClassName = 'com.xxx.xxx.XxxxApplication' manifest { attributes "Manifest-Version": 1.0, 'Bundle-SymbolicName': 'xxxx', 'Bundle-Version': 'xxx' } }
31. maven 打包
IDEA右侧maven Projects菜单->项目名->Lifecycle->package
------------------------------------------------------------------
32.ArrayList 和 LinkedList
ArrayList: 底层是数组,查找速度快(使用脚标),增加与删除慢,线程不安全
想要在线程安全的基础上使用数组,可以使用Vector,(Vector的大部分方法都被synchronized修饰,算是线程安全,不绝对安全)
LinkedList: 适合插入删除频繁的情况,底层是双向链表,查找慢(每次都需要从头结点遍历查询),增删快,线程安全
33. HashMap:
HashMap不算是线程安全,可能会出现关键字不相同的元素被映射到相同的存储位置的冲突,
可以使用ConcurrentHashMap来保证线程安全
ConcurrentHashMap: 是HashMap的一个线程安全的、支持高效并发的版本
synchronized+CAS+HashEntry+红黑树
CAS: Compare And Swap : 实现线程安全的无锁机制,乐观锁 (内存值V,旧的预期值,要修改的新值B)
可能会引发ABA问题:A线程在将A修改为C的过程中,B线程将A修改为其它值,又修改为A值,最后A正常执行,但是该过程可能会引发一些异常
频繁使用CAS会提升CPU压力
HashTable: 线程安全的,所有涉及到多线程操作的都加上了synchronized关键字来锁住整个table,所有线程竞争一把锁,效率低下
34. 数据库事务的特性:
原子性(不可分割,要不全成功,要不全失败)、
一致性(事务提交前和提交后数据是一致的)、
隔离性(一个事务操作对另一个事务不可见)、
持久性(一旦提交,不可回滚)
35. 数据库事务的隔离级别:
脏读(A修改了数据,未提交,B使用了这个数据,即一个事务读取到了另外一个事务没有提交的数据)
幻读(同一事务中,用同样的操作读取两次,得到的记录数不相同),在于新增或删除
不可重复读(A事务多次读取同一数据,B事务后进来,修改数据,导致A数据多次查询的相同数据不相同),在于修改
第一类丢失更新:(A事务回滚,覆盖了B事务)
第二类丢失更新:(A事务提交,覆盖B事务)
为了解决这些问题,数据库使用锁机制解决并发访问的问题
隔离级别:
Read uncommitted 读未提交 :允许脏读,并发最高,一致性最差的隔离级别
Read committed 读已提交:防止脏读,Oracle
Repeatable read 可重复读:可以防止脏读和不可重复读,MySql默认隔离级别
Serializable 串行化:一致性高,并发性低
36. Spring AOP (Aspect Oriented Programming)面向切面编程:横向编程
使用@Aspect,定义切入点@Pointcut,要拦截的包名
@Before 在方法拦截到,数据处理之前执行的操作
@After 在方法拦截到,数据处理之后执行的操作
Spring AOP的底层实现方法:
JDK动态代理方式:
代理接口,Spirng默认采用JDK动态代理实现机制

主要涉及java.lang.reflect包下边的两个类:Proxy和InvocationHandler。其中,InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态地将横切逻辑和业务逻辑编织在一起(
通过实现InvocationHandlet接口创建自己的调用处理器,
通过为Proxy类指定ClassLoader对象和一组interface来创建动态代理;
通过反射机制获取动态代理类的构造函数,其唯一参数类型就是调用处理器接口类型
通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数参入)
CGLib方式:Code Generation Library,
通过字节码底层继承要代理类来实现,不能代理final方法

可以为一个类创建一个子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑(
运行期动态扩展java类,Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程)
37. RestTemplate 访问接口
// 远端接口,返回值JSONObject.toJSONString(object) // 直接访问: StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("http://xxx"); ResponseEntity<String> res = restTemplate.getForEntity(stringBuffer.toString(), String.class); String strBody=null; XXXDTO resp=null; //解析JSON字符串数据 strBody = res.getBody(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); try { resp = mapper.readValue(strBody, XXXDTO.class); }catch(IOException e){ //e.printStackTrace(); logger.error("json parse to DTO errorInfo{}",e.getMessage()); } // 不清楚返回什么值,使用Object.class ResponseEntity<Object> object = restTemplate.getForEntity(stringBuffer.toString(), Object.class);
38. 如何根据能连通的IP查看主机名称
1 | ping -a ip |
39. 如何回退尚未push的最近一次commit
1 | git reset --soft HEAD~ 1 |
40. 有时gradle项目提示报错 Plugin [id: 'xxx', version: 'xx.xx.xx'] was not found in any of the following sources:
解决方法:https://blog.triplez.cn/posts/err-and-solution-of-config-gradle-idea-env/
41. linux 根据进程ID查看占用的端口号
netstat -nap | grep 进程id
42. docker run 运行容器
docker run -d -p 3000:3000 --name imageName 1 镜像名称:镜像tag #运行
-p 主机端口:容器内端口
43. linux 根据进程ID删除进程
kill -9 进程ID
44. FTPClient changeWorkingDirectory的值
带/(路径默认分隔符)为绝对路径,不带/为相对路径
45. linux 查看当前路径下,第一层文件夹的大小
du -h --max-depth=1 | sort -hr
46. linux 查看当前文件夹的总大小
du -sh
47. linux 查看当前可用磁盘空间
df -h
JPA
Hibernate
SpringBoot
RestTemplate
微服务nacos
微服务中各个模块之间的调用方式
定时器
多线程
Spring的事务隔离级别
SpringBean的生命周期
设计模式
socket转发 : https://blog.csdn.net/qq_35189120/article/details/111942009
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具