
java
sssdal19995
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
在linux上热发布java.jar
# 当前需要发布的应用名称,jar包应该放在当前脚本的同级目录,并且命名为 $app_name.jarapp_name="demo"# 本地机器的ipapp_host_ip="192.169.75.129"# 端口信息 当前jar 启动几个端口app_port_str="8081,8082"# 调试端口app_debug_port_str="7081,7082"# java optionsapp_options=""# 测试程序启动成功的url 运行的时候会自动拼上 http://ap.原创 2021-10-28 21:02:38 · 2040 阅读 · 1 评论 -
记一次线上排查cpu飙升原因
使用top 查看程序占用情况定位到是哪个服务占用cpu过高根据第一步的pid定位到是哪个线程cpu使用异常top -H -p 67849使用sudo jstack 67849> jstack.log 将当前服务的堆栈信息输出到一个文件中将第二步找到的异常线程的pid转换成为16进制printf ‘%x\n’ 68020在第三步输出文件中查找 nid=0x<16进制pids>的线程,查看具体是哪个线程占用cpu异常备注: 以上截图均为事故解决后为记..原创 2021-07-02 19:25:57 · 200 阅读 · 0 评论 -
实现一个简单的加密解密工具类:java加密数据 js 解密数据
后端加密代码:public class WsdDescUtils{ private final static byte[] ENCRYPT_VAL = { 65, 68, 54, 52, 65, 53, 69, 48, 52, 56, 57, 57, 69, 56, 56, 69 }; public static String simpleEncode(String str) throws UnsupportedEncodingException原创 2021-06-09 15:37:04 · 337 阅读 · 0 评论 -
通过反射执行被动态代理的类中的方法-面向接口编程的必要性
首先准备1个接口和1个实现类 用来模拟场景public interface TestService { // 空方法 什么都不做 子类也不重写 default void nothingTodo(){} // 子类需要重写的方法 void todoSomething();}@Servicepublic class TestServiceImpl implements TestService { public void todoSomething() {原创 2021-05-02 14:39:52 · 458 阅读 · 2 评论 -
读取jar内指定文件夹中所有文件信息
在我们日常开发过程中会经常遇到通过模板生成文件的业务场景,但是模板可能会经常发生改变,所以我们使用以下代码实现对文件的读取:private static List<String> loadFiles(String basePath, String fileType, List<String> lst) { URL resource = FileUitls.class.getClassLoader().getResource(basePath); if原创 2021-03-29 11:49:12 · 501 阅读 · 1 评论 -
封装一个rtsp转rtmp的插件
RTSP转RTMP服务环境搭建nginxnginx 需要安装rtmp模块配置文件rtmp { server { # rtmp 监听端口 listen 1935; chunk_size 4000; application live { live on; # record first 1K of stream #record all;原创 2021-03-13 19:09:02 · 340 阅读 · 1 评论 -
javassist修炼笔记
什么是javassist看到这篇文章的兄弟们肯定对字节码框架有一定的了解,不然也不会闲的发慌,来搜这种东西,所以这里就从百度上粘贴了一段话:Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。javassist简单易用, 快速。为什么要用javassist当我们有大量重复的固定逻辑,这部分逻辑可以通过反射解决,但是我们都知道反射的弊端在于当原创 2021-01-25 14:37:50 · 500 阅读 · 2 评论 -
maven-resource-profiles
maven-resource-profiles 最近接到一个项目部署任务,拿着专业的眼神review了一遍,发现部署开发环境和生产环境还要通过手动指定properties,这个不是很Low吗,于是决定安排安排。 因为之前在一个maven项目中看到使用profiles 动态注入参数的配置,于是赶紧花了5分钟cv。pom中的片段application.propertiesapplicationContext.xml启动之后发现一切正常,服务也可以访问,功能也正常。但是当打成war包部署到原创 2020-06-08 16:05:35 · 235 阅读 · 0 评论 -
数据结构学习1-稀疏数组
稀疏数组目的:压缩数组,使得存储的空间更小例子:/** 原二维数组0 0 0 0 00 1 0 0 00 0 2 0 00 0 3 0 0// 压缩后的稀疏数组4 5 3 原数组有几行几列,有多少个有效值1 1 1 每一个有效值的存放位置2 2 23 2 3 */当原数组中存在大量空值的时候,稀疏数组可以极大的压缩空间例如上面的原本需要存储20个值,但是转换成为稀疏数组之后只需要12个值即可满足要求代码int[][] arr1 = new int[11][11原创 2021-02-01 22:01:22 · 189 阅读 · 0 评论 -
从源码来看ThreadLocal
从源码来看ThreadLocal为什么threadLocal线程安全 public T get() { // 从下面2行代码可以看出不管是在哪个线程中运行,它拿出的ThreadLocalMap都是当前线程上的threadLocals的对象 Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) {原创 2020-12-15 16:58:18 · 113 阅读 · 1 评论 -
记录一次探索在线视频播放的收获
前言最近接到一个需求,用户需要在浏览器上播放上传的视频,然后想到以前学习的学成在线项目中的媒资管理模块有这部分需求,立马开动,后台服务搭建作为一个开发者,风骚的走位是必须滴。。。所以就萌发了使用一把gradle的想法。后端模块使用的是springboot + gradle + jetty使用gradle遇到的问题gradle 中怎么使用springboot在maven 中我们引入Springboot 需要在pom.xml中设置依赖即可 <parent> <gr原创 2020-11-26 16:30:13 · 420 阅读 · 0 评论 -
netty学习(四) - 初试webSocket
webSocket 是在H5上提出的规范,它可以解决很多以前http无法做到的事情,比如:每次请求都要携带cookie、一大堆请求头信息只能客户端主动调用服务端方法,不能从服务端往客户端推送数据服务端public class WebSocketServer { public static void main(String[] args) throws InterruptedException { EventLoopGroup boosGroup = new NioEve原创 2020-10-11 17:54:39 · 409 阅读 · 0 评论 -
netty学习(三) -基于socket实现消息通讯(聊天室,广播)
目标每一个客户端连接上服务器的时候需要给其它客户端发送消息。当前客户端可以发送消息给所有连接上了的客户端。服务端public class WeChatServer { private static final Logger logger = LoggerFactory.getLogger(WeChatServer.class); public static void main(String[] args) throws InterruptedException {原创 2020-10-11 17:33:46 · 557 阅读 · 0 评论 -
netty学习(二) -基于socket的服务端和客户端通讯
实现客户端和服务端之间的通讯,客户端给服务端发送消息,同时服务端给客户端发送一条反馈消息服务端代码public class SocketServer { private static final Logger logger = LoggerFactory.getLogger(SocketServer.class); public static void main(String[] args) throws InterruptedException { EventLo原创 2020-10-11 12:25:00 · 539 阅读 · 2 评论 -
netty学习(一) - helloWorld
钻石恒久远,helloWorld 永流传。作为第一个netty的入门程序,也来写一个基于netty实现的helloWorld,直接上代码服务器代码public class HttpServer { public static void main(String[] args) throws InterruptedException { // acceptor 使用的线程池 它只处理连接请求 不做具体的工作 所以叫boss EventLoopGroup bossGr原创 2020-10-11 12:07:54 · 194 阅读 · 0 评论 -
使用代码配置替代web.xml注入servlet、filter、listener
在传统项目中,我们通常是一个war包打天下,这个时候很多东西都依赖于web.xml进行配置,当项目越来越大,我们的xml文件也会不断膨胀,大家都知道xml的描述能力不太强,对于devolper而言,使用代码配置毫无疑问更加舒适。ServletContainerInitializer为实现上面这个目标,我们必须了解servlet 3.0 为我们提供的ServletContainerInitializer, 这个接口能够在所有遵循servlet3.0规范的容器启动时回调其中定义的方法/** * @v原创 2020-10-10 19:07:14 · 346 阅读 · 0 评论 -
记一次基于xml配置的springMvc自定义aop切面增强controller
实现目的:异常捕捉,统一处理实现白名单aop代码@Aspect@Component("wySystemErrorAdvice")public class WySystemErrorAdvice { @Autowired @Qualifier(WebExecptionResolver.beanid) private WebExecptionResolver webExecptionResolver; /** * 定义一个切点 此处去除了项目实际中使用的切点原创 2020-10-05 21:15:40 · 598 阅读 · 0 评论 -
微服务实战笔记-学成在线-day09
知识点: 1. Eureka的单机环境和高可用 2. Ribbon 3. FeignEureka的单机环境和高可用针对于eureka的单机环境和高可用,以及安全认证另外单独写了一篇笔记记录,详情可以点击这里进入此外还整理了以下怎么使用docker搭建eureka 高可用环境,详情请戳此处注意使用eureka之后,restTemplate会被增强,所以不能直接通过ip访问服务,需要通过服务名Ribbonribbon 是一个客户端负载均衡工具,首先这里需要理解客户端负载与服务端负载的区原创 2020-06-23 22:54:44 · 169 阅读 · 0 评论 -
微服务实战笔记-学成在线-day08
分布式文件管理系统FastDFSfastdfs基础知识 fastdfs 是一个分布式文件管理系统,它与传统的分布式文件管理系统不同,它不对文件进行分块存储(前面使用到的gridfs会对文件进行切割),所以在小文件的存储和读取上,它的性能十分优越。架构tracker(追踪/调度服务器) tracker的作用是负载均衡和调度,应用程序通过请求调度器来获取哪个storage为本次请求服务。storage storage的作用是存储。值得注意的是storage并没有实现自己的文件管理系统而是直原创 2020-06-03 23:04:43 · 278 阅读 · 0 评论 -
微服务实战笔记-学成在线-day07
知识点springboot中实体字段为dType 传到前台json为dtype的原因与解决方案vue中watch的基本用法element-ui中MessageBox的自定义校验mybatis中collection的用法1. springboot中实体字段为dType 传到前台json为dtype的原因与解决方案原因springboot 使用fastjson 在对象的序列化和反序列化的时候对字段进行了处理解决方案在bean的get方法上添加@JsonProperty注解@Data@T原创 2020-05-24 21:16:40 · 275 阅读 · 0 评论 -
微服务实战笔记-学成在线-day06
页面发布实战使用技术:springbootvuemongodbgridfsfreemarkerrabbitmq目标: 通过我们的cms程序可以实现动态发布界面到站点服务器上,不再需要程序员手动修改界面,拷贝文件。分析流程cms系统根据模板和dataurl静态化界面将静态化的界面存储到mongodb中通过rabbitmq给cms-client发送消息,通知获取内容cms-client获收到消息开始从Mongodb中下载文件cms-client下载文件完成后通过rabbit原创 2020-05-17 18:11:58 · 278 阅读 · 0 评论 -
微服务实战笔记-学成在线-day05
RabbitMQ介绍RabbitMQ是当前比较流行的一种消息中间件,它遵循AMQP协议。使用场景任务需要异步处理应用程序解耦RabbitMQ的优点社区比较完善 资料好找,使用简单依旧有团队进行维护遵循AMQP协议高并发环境下的表现好,因为它是使用erlang实现的SpringBoot 默认集成rabbitMQRabbitMQ中的概念术语名称解释producer生产者消息的发送方consumer消费者消息的接收方connect原创 2020-05-15 21:53:19 · 174 阅读 · 0 评论 -
微服务实战笔记-学成在线-day04
知识点:freemarkerGridFSspringBoot + vue 实现文件上传下载freemarker简单介绍freemarker是一种类似于jsp的免费的java模板引擎,他可以基于模板和数据生成数据(可以是html,email,world,excel等等)类似于freemarker的模板引擎还有jsp,Thymeleaf,Velocity等数据模型数据模型在java中可以是基本类型,也可以是List,Map,Pojo等复杂类型模板通过数据模型和模板一起生成最终的文件下原创 2020-05-12 21:36:13 · 491 阅读 · 0 评论 -
微服务实战笔记-学成在线-day03
知识点vue中router的用法spring-data-mongodb的用法restful中的get ,post,put,delete服务端异常统一封装处理vue中router的用法vue中router 的作用就是从当前页面跳转到另外一个页面,类似于a标签,不同的是,它可以在跳转的时候传递一些参数。router 跳转页面的方式在router/index.js 中指定菜单地址...原创 2020-05-06 19:09:32 · 246 阅读 · 0 评论 -
微服务实战笔记-学成在线-day02
知识点:vuewebpackvue中的跨域解决方案-proxyTablevueMVVMMVVM拆分解释为:Model:负责数据存储View:负责页面展示View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示MVVM要解决的问题是将业务逻辑代码与视图代码进行完全分离,使各自的职责更加清晰,后期代码维护更加简单用图解的形式分析Ajax请求回...原创 2020-05-03 21:13:04 · 297 阅读 · 0 评论 -
微服务实战笔记-学成在线-day01
知识点:SSI 服务端包含技术MongoDBSwagger 使用LombokSSI 服务端包含技术ssi技术可以将多个小模块的界面拼凑到一起形成一个完整的界面,主流的web应用服务器(nginx)都提供了支持。使用ssi的好处,当我们门户网站内的某一小块需要改变,比如页头或者页脚等需要修改内容的时候,我们不用去修改整个门户页面,只用修改对应的子页面即可nginx使用:ngin...原创 2020-05-01 23:21:21 · 209 阅读 · 0 评论 -
为什么要重写hashCode
== 与equals 的区别==使用==的时候会根据对象的类型为引用对象还是值对象分开处理,如果是值对象的话会直接比较2个值是否相等,如果是引用对象的话会比较内存地址是否相同equalsequals 是Object 类提供的方法,除了值对象之外的其他对象都可以通过调用equals比较,如果没有重写此方法那么实质上也是比较2个对象的内容。为什么需要重写equals当我们的对象之间是否相...原创 2020-04-19 21:48:05 · 1259 阅读 · 0 评论 -
原来tomcat是这么玩的(三)组件启动流程
前面一篇文章中记载了tomcat中几大组件是如何初始化的,这里记载一下组件如何启动。通过前面我们知道组件的初始化其实调用的生命周期中的init方法,那么我们可以猜测启动是不是也是调用的生命周期中的start方法。由于上一篇有详细的跟踪init方法的过程,start方法与它大同小异,所以这里只详细解析其中几个关键的地方。...原创 2020-04-03 20:42:17 · 299 阅读 · 0 评论 -
原来Spring源码学习可以这么学(一)IOC
最近再重新学习spring源码相关知识,1.对以前学的知识进行查漏补缺,2.学习如何阅读spring的官方文档。IOCspring支持的配置方式方式使用场景xml需要引入第三方的组件,但是不能修改源码注解可以直接在需要注入的组件上加注解javaconfig基本上任意情况都能使用对于spring而言,三种配置方式可以同时存在,互不影响。1.当xml...原创 2020-04-02 23:45:55 · 148 阅读 · 1 评论 -
原来tomcat是这么玩的(二)组件初始化流程
上一篇中大概介绍了tomcat的几大组件的大概作用和各自所处的位置,这里再来看下tomcat在初始化的过程中主要干了什么事情BootstrapBootstrap是tomcat的入口类,所以我们先来看这个类。在看main方法之前我们先看Bootstrap的最上面,这里有一个静态代码块,从这段代码块中我们可以看出它就是对一些环境变量进行了设置,然后设置catalinaHomeFile(安装目...原创 2020-04-01 16:16:49 · 205 阅读 · 0 评论 -
原来tomcat是这么玩的(一)基本组件结构
组成tomcat是一个webServer服务器,里面的核心组件是Server,server是由多个service组成,每个service主要有Connector(连接器),Container(容器),Mapper(管理connectort与容器的关系)这3个组件Containertomcat中的容器分为engine,Host,Context,Wrapper(Servlet)他们之间是包含关...原创 2020-04-01 14:24:09 · 518 阅读 · 0 评论