![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
javaweb学习笔记
文章平均质量分 93
wanghowie
其实我想成为大牛
展开
-
Easy Rules core包 规则引擎
概述:1、依赖:可以只引入core包即可使用规则引擎;以引入easy-rules-support。支持XOR logic、json描述规则、yaml描述规则。如果要使用SpEL(Spring Expression Language)、MVEL(表达式解析器)则还需要引入easy-rules-spel[4.1.0开始引入]、easy-rules-mvel <dependency> <groupId>org.jeasy</groupId>原创 2020-09-04 00:03:24 · 1493 阅读 · 0 评论 -
责任链模式-优化系统元数据特殊处理
最近在工作中,涉及到元数据的特殊处理,由于系统需要兼容多级经销商和多组织模式;对于不同的租户类型、不同的业务控制方式、不同的登录用户,同一模块的元数据存在差异。注:此处的【元数据】用于构建前端界面的基本元素,前端调用服务获取元数据后构建界面...原创 2020-08-25 18:27:14 · 199 阅读 · 0 评论 -
JAVA程序性能优化--笔记1、Java性能调优的相关知识概述
程序的性能通过以下几个方面来表现:执行速度:程序的反映是否迅速,响应时间是否足够短。 内存分配:内存分配是否合理,是否过多地消耗内存或者存在泄漏。 启动时间:程序从运行到可以正常处理业务需要花费多长时间。 负载承受能力:当系统压力上升时,系统的执行速度、响应时间的上升曲线是否平缓。可以用于定量评测的性能指标有:执行时间:一段代码从开始运行到运行结束,所使用的时间。 CPU时间:函数或者线程占用CPU的时间。 内存分配:程序在运行时占用的内存空间。 磁盘吞吐量:描述I/O的使用情.原创 2020-07-10 13:59:16 · 149 阅读 · 0 评论 -
SPRING实战(3)、超媒体与Spring HATEOAS之一
超媒体作为应用状态引擎(Hypermedia as the Engine of Application State,HATEOAS)是一种创建自描述API的方式。API所返回的资源中会包含相关资源的链接,客户端只需要了解最少的API URL信息就能导航整个API。如果API启用了超媒体功能,那么API将会描述自己的URL,从而减轻客户端对其进行硬编码的痛苦。这种特殊风格的HATEOAS被称为HAL(超文本应用语言,Hypertext Application Language),这是一种在JSON响应中嵌入超原创 2020-06-23 23:00:01 · 1005 阅读 · 0 评论 -
SPRING实战(1)、Spring基础
Spring的核心是提供了一个 容器(container),通常称为Spring应用上下文(Spring application context),它们会创建和管理应用组件。将bean装配在一起的行为是通过一种基于 依赖注入(dependency injection,DI) 的模式实现的。Spring通过配置文件或者基于java配置将bean装配在一起。@Configuration注解会告知Spring这是一个配置类,会为Spring应用上下文提供bean。这个配置类的方法使用@Bean注解进行了标注,原创 2020-06-11 21:00:58 · 240 阅读 · 0 评论 -
Java并发编程学习-日记12、Redis 和 Java
Redis的配置项清单如下:(1)port:端口配置项,查看和设置Redis监听端口,默认端口为6379。(2)bind:主机地址配置项,查看和绑定的主机地址,默认地址的值为127.0.0.1。(3)timeout:连接空闲多长要关闭连接,表示客户端闲置一段时间后,要关闭连接。如果指定为0,表示时长不限制。这个选项的默认值为0,表示默认不限制连接的空闲时长。(4)dbfilename:指定保存缓存数据库的本地文件名,默认值为dump.rdb。(5)dir:指定保存缓存数据的本地文件所存放原创 2020-06-01 00:05:05 · 201 阅读 · 0 评论 -
Java并发编程学习-日记11、ZooKeeper实现分布式命名服务器
命名服务是为系统中的资源提供标识能力。ZooKeeper的命名服务主要是利用ZooKeeper节点的树形分层结构和子节点的顺序维护能力,来为分布式系统中的资源命名。 分布式命名服务器应用场景:分布式API目录:为分布式系统中各种API接口服务的名称、链接地址,提供类似JNDI(Java命名和目录接口)中的文件系统的功能。借助于ZooKeeper的树形分层结构就能提供分布式的API调用功能。著名的Dubbo分布式框架就是应用了ZooKeeper的分布式的JNDI功能。在Dubbo中,使用ZooKeepe.原创 2020-05-31 23:40:46 · 283 阅读 · 0 评论 -
Java并发编程学习-日记10、ZooKeeper
连接假死什么是连接假死呢?如果底层的TCP连接已经断开,但是服务器端并没有正常地关闭套接字,服务器端认为这条TCP连接仍然是存在。连接假死的具体表现如下:(1)在服务器端,会有一些处于TCP_ESTABLISHED状态的“正常”连接。(2)但在客户端,TCP客户端已经显示连接已经断开。(3)客户端此时虽然可以进行断线重连操作,但是上一次的连接状态依然被服务器端认为有效,并且服务器端的资源得不到正确释放,包括套接字上下文以及接收/发送缓冲区。连接假死通常是由以下多个原因造原创 2020-05-24 16:18:23 · 241 阅读 · 0 评论 -
Java并发编程学习-日记9、JSON 与 Protobuf
1、JSON:Jackson开源库的优点是:所依赖的jar包较少、简单易用、性能也还不错,另外Jackson社区相对比较活跃。 Jackson开源库的缺点是:对于复杂POJO类型、复杂的集合Map、List的转换结果,不是标准的JSON格式,或者会出现一些问题。 Gson可以完成复杂类型的POJO和JSON字符串的相互转换,转换的能力非常强。 从性能上说,FastJson库采用独创的算法,将JSON转成POJO的速度提升到极致,超过其他JSON开源库。在POJO序列化成JSON字符串的应用场景原创 2020-05-24 15:46:28 · 293 阅读 · 0 评论 -
Java并发编程学习-日记8、netty的编码和解码
Netty解码器ByteToMessageDecoder一个标准的解码器将输入类型为ByteBuf缓冲区的数据进行解码,输出一个一个的Java POJO对象。Netty内置了这个解码器,叫作ByteToMessageDecoder,位在Netty的io.netty.handler.codec包中。所有的Netty中的解码器,都是Inbound入站处理器类型,都直接或者间接地实现了ChannelInboundHandler接口。ByteToMessageDecoder解码的流程,大致具体可以描述原创 2020-05-24 15:22:39 · 520 阅读 · 0 评论 -
Java并发编程学习-日记7、第二个netty程序回显服务器
代码示例: public class NettyEchoServer { private final int serverPort; ServerBootstrap b = new ServerBootstrap(); public NettyEchoServer(int port) { this.serverPort = port; } public void runServer() { ...原创 2020-05-24 14:39:36 · 298 阅读 · 0 评论 -
Java并发编程学习-日记6、Netty基础知识点
Netty的服务启动类ServerBootstrap:Bootstrap类是Netty提供的一个便利的工厂类,可以通过它来完成Netty的客户端或服务器端的Netty组件的组装,以及Netty程序的初始化。它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景的需要,为组件设置好对应的参数,最后实现Netty服务器的监听和启动。Netty中的各种组件:服务器启动器、缓冲区、反应器、Handler业务处理器、Future异步任务监听、数据传输通道。原创 2020-05-23 21:52:19 · 600 阅读 · 0 评论 -
Java并发编程学习-日记5、Netty从DiscardServer实践开始
DiscardServer所示,创建netty服务端,一共有8步,重点在:监控事件的线程组、通道及通道参数、出入站的处理器(绑定在流水线上)、异步监控事件处理 public class NettyDiscardServer { private final int serverPort; /* Netty的服务启动类ServerBootstrap,它的职责是一个组装和集成器,将不同的Netty组件组装在一起。另外,ServerBootstrap能够按照应用场景...原创 2020-05-22 23:33:22 · 210 阅读 · 0 评论 -
Java并发编程学习-日记4、 Future异步回调
JION join操作的原理是:阻塞当前的线程,直到准备合并的目标线程的执行。在Java中,线程(Thread)的合并流程是:假设线程A调用了线程B的B.join方法,合并B线程。那么,线程A进入阻塞状态,直到B线程执行完成。(1)join是实例方法,不是静态方法,需要使用线程对象去调用,如thread.join()。(2)join调用时,不是线程所指向的目标线程阻塞,而是当前线程阻塞。(3)只有等到当前线程所指向的线程执行完成,或者超时,当前线程才能重新恢复执行。(4)join有...原创 2020-05-20 20:51:49 · 618 阅读 · 0 评论 -
Java并发编程学习-日记3、Reactor反应器模式
本博文记录了学习Reactor反应器模式的一些笔记。java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章——《Scalable IO in Java》,在文章中Doug Lea通过各个角度,循序渐进的梳理了服务开发中的相关问题,以及在解决问题的过程中服务模型的演变与进化,文章中基于Reactor反应器模式的几种服务模型架构,也被Netty、Mina等大多数高性能IO服务框架所采用。所以可以仔细拼读一下《Scalable IO...原创 2020-05-19 22:17:34 · 278 阅读 · 0 评论 -
Java并发编程学习-日记2、NIO实现Discard服务器实践
源码分析: ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。 通过ServerSocketChannel.accept()方法监听新进来的连接。当accept()方法返回的时候,它返回一个包含新进来的连接的SocketChannel。 ServerSocketChannel可以设置成非阻塞模式:serverSocketChannel.configureBlocking(false);在非阻塞模式下,accept(...原创 2020-05-18 21:56:08 · 243 阅读 · 0 评论 -
Java并发编程学习-日记1、常见的IO模型、NIO、OIO
常见的IO模型:1、同步阻塞IO(Blocking IO): 在Java中,默认创建的socket都是阻塞。同步IO,是一种用户空间与内核空间的IO发起方式。同步IO是指用户空间的线程是主动发起IO请求的一方,内核空间是被动接受方。异步IO则反过来,是指系统内核是主动发起IO请求的一方,用户空间的线程是被动接受。阻塞IO的特点及优缺点:阻塞IO的特点是:在内核进行IO执行的两个阶段,用户线程都被阻塞。 阻塞IO的优点:应用的程序开发非常简单;在阻塞等待数据期间,用户线程挂起。在阻塞期间,用户线程原创 2020-05-18 21:17:33 · 573 阅读 · 0 评论 -
常用的排序算法实现(2)-堆排序
堆排序相对来说比较复杂。这里使用了两种是实现方案,方案1,heapSort1()需要借助于二叉堆类,这个算是一个入门;有助于理解堆排序。方案2,heapSort2()将数组看成是一棵二叉树,首先要对树转换,使其变成大顶堆。然后再进行排序。这里需要注意1.数组索引从0开始。所以计算元素索引的时候要转换,而且要注意越界问题。2.大顶堆和堆排序都只用了下沉操作;2.1在构建大顶堆的时候,要从...原创 2020-04-15 22:04:40 · 121 阅读 · 0 评论 -
常用的排序算法实现(1)-选择排序、插入排序、希尔排序、归并排序、快速排序
package sort;import java.util.Arrays;/** * 描述: * 排序算法 * * @author wanghui email:wanghuiaf@yonyou.com * @create 2020-04-13 上午11:03 */public class SortAlgorithm { private static Compara...原创 2020-04-15 10:39:44 · 149 阅读 · 0 评论 -
Java服务端开发面试题汇总
近期在换工作中,参加了形形色色的公司的面试,现在将聚焦到面试的具体内容上。在这里需要强调的是,我参与的面试是面向中高级开发的工程师;对于某一个问题的展开往往都是由浅到深,以及个人在领域中的应用的理解。这里我没有给出答案。当然面试的时候面试官处理固定的会提问的一些东西外,简历中的技能栏可能会是提问的重点区域。以下是我总结的可能会问到的问题,但是每一个问题都可以继续深挖三到四层,所以...原创 2018-08-25 17:45:04 · 3880 阅读 · 0 评论 -
微信支付与支付宝支付——扫码支付
最近由于产品增加支付需求,研究了一下微信与支付宝的扫码支付。现在把学习心得和踩过的坑写出来,供大家参考。前提扫码支付分类两种情况:卖家通过扫码设备,扫描买家的二维码,完成支付。——这种支付方式的应用环境:便利店、超市等的收银台 卖家调用支付平台的预订单接口,返回支付二维码连接地址,卖家系统调用二维码生成器,生成二维码,买家扫描二维码,完成支付。——这种支付方式的一个实际的案例就是亚马逊...原创 2018-07-25 22:13:35 · 7578 阅读 · 2 评论 -
Java Web编程——1、Servlet
1、Servlet是一个运行在Web服务器中的Java小程序。Servlet将会接收和响应来自Web客户端的请求,使用HTTP进行同行。(A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually...原创 2018-05-02 00:19:40 · 311 阅读 · 0 评论 -
最近在JavaWeb项目开发遇到的一些问题
1、使用maven模块化:通过IDEA使用maven构建项目的模块化较为简单,只需要在主(父)项目上右键new——module即可。这里要说明的时,在构建模块项目时,可能出现的循环依赖问题。此时项目启动时将会报错“The projects in the reactor contain a cyclic reference.”。出现这种情况往往是因为不同模块存在直接或间接的相互依赖的情况。此时,原创 2018-02-01 00:18:23 · 7713 阅读 · 0 评论 -
微信公众号支付
笔者对微信公众号支付的相关问题的汇总。原创 2017-11-27 22:12:00 · 810 阅读 · 0 评论