Tomcat

后端架构师技术图谱

ε祈祈猫儿з 提交于 2021-02-13 15:28:50
后端架构师技术图谱 原文链接: github.com 最后更新于20180502 数据结构 队列 集合 链表、数组 字典、关联数组 栈 树 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B-,B+,B*树 LSM 树 BitSet 常用算法 排序、查找算法 选择排序 冒泡排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 桶排序 基数排序 二分查找 Java 中的排序工具 布隆过滤器 字符串比较 KMP 算法 深度优先、广度优先 贪心算法 回溯算法 剪枝算法 动态规划 朴素贝叶斯 推荐算法 最小生成树算法 最短路径算法 并发 多线程 线程安全 一致性、事务 事务 ACID 特性 事务的隔离级别 MVCC 锁 Java中的锁和同步类 公平锁 & 非公平锁 悲观锁 乐观锁 & CAS ABA 问题 CopyOnWrite容器 RingBuffer 可重入锁 & 不可重入锁 互斥锁 & 共享锁 死锁 操作系统 计算机原理 CPU 多级缓存 进程 线程 协程 Linux 设计模式 设计模式的六大原则 23种常见设计模式 应用场景 单例模式 责任链模式 MVC IOC AOP UML 微服务思想 康威定律 运维 & 统计 & 技术支持 常规监控 APM 统计分析 持续集成(CI/CD) Jenkins 环境分离 自动化运维 Ansible puppet chef

Docker三十分钟快速入门(上)

China☆狼群 提交于 2021-02-13 08:47:46
一、背景 ​   最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃。那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Docker. 二、虚拟化技术简介和发展 1. 阶段一:无虚拟化技术    众所周知,在虚拟化技术出现之前,我们依靠扩展物理机的方式来扩展我们的应用,这个阶段很痛苦,也有很多的缺点,比如: Capex费用昂贵 Go to Product速度极其慢 系统可移植行极低 资源利用率极低 2. 阶段二:基于Hypervisor的虚拟化技术 这个阶段,出现的虚拟化技术让很多人开心不已,随着时间的流逝,市面上也出现不少相关的实际应用的技术,如:VMware、KVM、AWS、Microsoft的Hyper-V等。    基于Hypervisor的虚拟化技术的优点: 资源利用率高 易于扩展、伸缩 Go to Product快速 成本降低 基于Hypervisor的虚拟化技术的缺点: OS内核资源被重复消耗资源 应用移植性较低 3. 阶段三:基于容器的虚拟化技术 由于Hypervisor的虚拟化技术不是很完美,对内核的资源重复消耗,那随着技术的发展就出现了基于容器的虚拟化技术,最热的就是Docker Container了。它底层使用CGroup和Namespace来实现多个容器之间共享内核资源

Tomcat部署Web项目的3种方式

爷,独闯天下 提交于 2021-02-13 08:38:15
一、将war包丢进webapps   这是最简单粗暴的方式:将web工程打成war,丢进tomcat/webapps目录即可,tomcat会自动解压。 无需修改任何配置文件即可完成部署。   这里我准备了tomcat8.5.43与dubbo控制台的war包来做测试。      ①启动tomcat   ②将war丢进webapps目录,tomcat会自动解压该war包。      浏览器直接访问: localhost:8080/dubbo-admin-2.5.10 ,说明我们的war包部署成功!( 访问路径为war包的名称 ) 二、配置Server.xml部署Web工程   修改配置文件无需我们打war,这样方便开发,结合 IDEA自动部署WEB工程至远程服务器(学习笔记) 可以实现快速开发。   编辑server.xml       添加如下:<Context docBase="D:\test\dubbo-admin-2.5.10" path="/test" reloadable="false" />( 访问路径为path内容 )       通过浏览器访问: localhost:8080/test    三、添加xml方式部署Wweb工程    在D:\test\apache-tomcat-8.5.43\conf\Catalina\localhost:添加testA.xml   

实战笔记 | 在k3s集群、kubernetes集群安装部署ingress-nginx

天涯浪子 提交于 2021-02-13 07:45:54
先看效果 kubectl apply -f deploy.yaml 执行上面的命令后,通过netstat -nltp 确认本机80、443是nginx进程在监听 apiVersion : v1 kind : Namespace metadata : name : ingress-nginx labels : app.kubernetes.io/name : ingress-nginx app.kubernetes.io/instance : ingress-nginx --- # Source: ingress-nginx/templates/controller-serviceaccount.yaml apiVersion : v1 kind : ServiceAccount metadata : labels : helm.sh/chart : ingress-nginx-2.0.3 app.kubernetes.io/name : ingress-nginx app.kubernetes.io/instance : ingress-nginx app.kubernetes.io/version : 0.32.0 app.kubernetes.io/managed-by : Helm app.kubernetes.io/component : controller name :

聊一聊 HTTPS 的工作原理

こ雲淡風輕ζ 提交于 2021-02-13 07:34:56
关注公众号 前端开发博客 ,回复“ 加群 ” 加入我们一起学习,天天进步 文章来源:https://www.javadoop.com/post/https 本文聊聊 HTTPS 的一些东西,和大家扯扯 SSL 证书的整个工作流程。希望大家有一些基本的常识: https 使用了非对称加密和对称加密,为什么要使用对称和非对称加密?非对称加密的原理是什么?这种简单的问题默认读者已经了解了。 非对称加密涉及到一对公钥和私钥组合,它们是一一对应的关系,不存在一个私钥对应多个公钥这种情况。 CA 是 Certification Authority 的缩写,它代表世界上那些权威的证书颁发机构。 CA 需要做什么 我们在申请一个 https 证书的时候,要在市场上选择一家 CA 来给你签发证书,那么 CA 的工作是什么呢? CA 要验证这个域名真的是你的:通常就是通过 DNS 记录或者就是你在指定 URI 下放置一个特殊文件,让 CA 可以在外网环境下访问到它。 CA 是一个非常关键的角色,因为它签出来的任何证书都是被信任的,所以这要求每个 CA 都不能胡来。 ❝ 试想一下,如果某个 CA 私自给某个黑客签发了 *.taobao.com 的证书,那么黑客就能利用这个证书实现中间人攻击了。 有没有发生过 CA 瞎搞的事情呢?有一个典型的案例就是赛门铁克,由于它签发了大量的不合规的证书,导致了

Nginx实现负载均衡 + Keepalived实现Nginx的高可用

冷暖自知 提交于 2021-02-13 07:02:56
前言   使用集群是大中型网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求和用户量。这种情况下,更恰当的做法是增加一台或多台服务器去分担原有服务器的访问及存储压力。通过 负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上 ,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。 环境准备   192.168.0.221:nginx + keepalived master (主)   192.168.0.222:nginx + keepalived backup slave (从)   192.168.0.223:tomcat   192.168.0.224:tomcat   虚拟ip(VIP):192.168.0.200,对外提供服务的ip,也可称作浮动ip   各个组件之间的关系图如下: Tomcat做应用服务器    tomcat 的安装不在本博客范围之内,具体例子网上很多在此就不讲解, tomcat 的 webapps 下记得放自己的应用,我的是 myWeb ,如果大家也用我的 myWeb ,那么index.jsp中的ip需要换成自己的   将192.168.0.223

ServletContext

放肆的年华 提交于 2021-02-13 01:44:19
Web容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且他被所有客户端共享。 ServletContext对象可以通过ServletConfig.getServletContext()方法获得对ServletContext对象的引用,也可以通过this.getServletContext()方法获得其对象的引用。 由于一个Web应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称为context域对象。 当web应用关闭,tomcat关闭或者web应用reload的时候,ServletContext对象会被销毁。 常用方法: 1、添加属性:setAttribute(String name,Object obj) 2、得到值:getAttribute(String name) 3、删除属性:removeAttribute(String name) 来源: oschina 链接: https://my.oschina.net/u/4131739/blog/4536263

Java的几种线程状态说明

谁都会走 提交于 2021-02-12 21:29:02
Java的几种线程状态说明 1、NEW(新建) java.lang.Thread.State枚举中的NEW状态描述: 1 2 3 4 /** * Thread state for a thread which has not yet started. */ NEW 创建后尚未启动的线程处于这个状态。 意思是这个线程没有被start()启动,或者说还根本不是一个真正意义上的线程,从本质上讲这只是创建了一个Java外壳,还没有真正的线程来运行。 不代表调用了start(),状态就立即改变,中间还有一些步骤,如果在这个启动的过程中有另一个线程来获取它的状态,其实是不确定的,要看那些中间步骤是否已经完成了。 2、RUNNABLE(可运行) java.lang.Thread.State枚举中的RUNNABLE状态描述: 1 2 3 4 5 6 7 /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * such as processor. */ RUNNABLE

Docker系列-第六篇DockerFile解析

吃可爱长大的小学妹 提交于 2021-02-12 18:54:22
1.手动编写一个dockerfile文件,当然必须要符合file的规则 2.有了这个文件,直接docker build命令执行,获得一个自定义的镜像 3.run 1.是什么 Dockerfle 是一个文本格式的配置文件, 用户可以使用 Dockerfle 来快速创建自定义的镜像。 Dockerfile是用来<font color='red'>构建Docker镜像的构建文件</font>,是由一系列命令和参数构成的脚本。 1.1三步骤 编写Dockerfile文件 docker build docker run 2.DockerFile构建过程解析 2.1Dockerfile内容基础知识 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行 3:#表示注释 4:每条指令都会创建一个新的镜像层,并对镜像进行提交 2.2Docker执行Dockerfile的大致流程 (1)docker从基础镜像运行一个容器 (2)执行一条指令并对容器作出修改 (3)<font color='blue'>执行类似docker commit的操作提交一个新的镜像层</font> (4)<font color='blue'>docker再基于刚提交的镜像运行一个新容器</font> (5)<font color='blue'

微信小程序与java后台交互

筅森魡賤 提交于 2021-02-12 12:03:01
java后台使用的ssm框架,小程序连接的本地接口。跟正常的web访问没什么区别,也是后台获取url,返回json数据;只是小程序前台请求的url要带上http://localhost:8080 1. 项目结构 2. 配置文件: Jackson相关包下载 除去里面的js文件 3. test.js和test.wxml (1) test.js bindtest:function(){ wx.request({ url: ' http://ip:8080/WxProgram/buttonTest2 ' , data:{ username: 'admin' , password: 'admin' }, method: 'GET' , header:{ 'content-type':'application/json' }, success:function(res){ console.log(res.data); }, fail:function(res){ console.log( "--------fail--------" ); } }) } (2) test.wxml <view>{{name}}</view> <view> <button bindtap='bindtest'>test</button> </view> 4. WxTestController.java