DOCKER
参考文章:
十分钟学会用docker部署微服务
-
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。(开始时觉得docker麻烦,我部署java应用,直接打个jar包到linux上然后运行不就可以了,不是更简单。然而发现站的角度不同,docker站的角度是一键部署到所有类型的linux机器上,而非单独一台)
-
Docker架构:Docker daemon( Docker守护进程):运行在宿主机上的后台进程,Client( Docker客户端),Images( Docker镜像),Container(容器),镜像和容器之间的关系就像java中类和对象的关系,Registry:集中存储与分发镜像的服务,类似maven仓库
-
安装java运行环境
多线程
多线程线程数设置多少合适
- 那我们如何分配线程?我们提供一个公式:
最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目
备注:这个公式也是前辈们分享的,当然之前看了淘宝前台系统优化实践的文章,和上面的公式很类似,不过在CPU数目那边,他们更细化了,上面的公式只是参考。不过不管什么公式,最终还是在生产环境中运行后,再优化调整。
我们继续上面的任务,我们的服务器CPU核数为4核,一个任务线程cpu耗时为20ms,线程等待(网络IO、磁盘IO)耗时80ms,那最佳线程数目:( 80 + 20 )/20 * 4 = 20。也就是设置20个线程数最佳。
- 线程不是开的越多越好,线程之间的切换还需要时间,1核开多线程,其实就相当于串行执行,只是cpu切换时间快,导致看起来像是并行
多线程和异步的区别 - 多线程只是异步编程的一种实现形式。多线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。
所以本质上,异步和多线程并不是一个同等关系,异步是最终目的,多线程只是实现异步的一种手段
其他
-
yum:下载软件包的,自动下载依赖的东西,yum search jdk | grep jdk8,yum install xx,默认安装目录:/usr/lib,配置环境变量: etc/profile, pwd打印当前目录
-
linux中的$PATH:是当前命令搜索路径,可以用echo $PATH 打印出
-
apt(Advanced Packaging Tool)是一个在 Debian 和 Ubuntu 中的 Shell 前端软件包管理器。
apt 命令提供了查找、安装、升级、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
apt 命令执行需要超级管理员权限(root)。
7.
改成8
然后出现:
解决办法:
8. 新建项目, 无法连接到http://start.spring.io/的解决办法,关闭防火墙
9.
10. java.lang.InterruptedException: sleep interrupted异常:
主线程执行完了会强行打断子线程的执行(子线程调用了sleep),所以不会出现以前想的主线程执行完了,子线程还在自己跑
11. SpringBoot 如何异步编程,老鸟们都这么玩的
12. 让子线程执行完再结束,使用concurrent包下的CountDownLatch
13. 使用java集合类可以将ArrayList变成线程安全的集合
14. thread.jion会堵塞当前线程的父级线程,当前线程执行完了就会放开,不管其他同同级线程执行完没
15. Variable ‘count’ is accessed from within inner class, needs to be final or effectively final
原因:内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配。
解决:1.
16.
文章地址
17. Lock 解析,如何避免死锁? -
快照版本和正式版本得区别:文章地址
-
pom和import的作用:文章地址
-
程序包org.yaml.snakeyaml不存在:spring-boot的版本改为2.5.0
-
maven建立父子工程:使用packging为pom方式,然后dependecyManagement管理依赖版本,modul来管理子工程,子工程中使用parent指向父工程,使用relativepath指向父工程的pom文件,子工程会继承父工程的依赖
-
ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = requestAttributes.getRequest(); System.out.println(request.getParameter("a"));