
后端功能
文章平均质量分 58
码农UP2U
这个作者很懒,什么都没留下…
展开
-
《Java 核心技术卷1 基础知识》第 4 章 对象与类
面向对象程序设计(object-oriented programming, OOP)面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。一旦确定了这些过程,就要开始考虑存储数据的适当方式。这就是 Pascal 语言的设计者 Niklaus Wirth 将其著作命名为《算法 + 数据结构 = 程序》的原因。在 Wirth 的这个书名中,算法是第一位的,数据结构是第二位的,这就明确地表述了程序员的工作方式。原创 2023-01-01 21:36:27 · 654 阅读 · 0 评论 -
《Java 核心技术卷1 基础知识》第三章 Java 的基本程序设计结构 笔记
曾经有人说,作为Java程序员如果没有卷过这本书,就算不上是真正的Java程序员,那么我就也来卷卷它吧。下面是我的读书摘录笔记。FirstSamplepublic class FirstSample{public static void main(String[] args){System.out.println("We will ot use 'Hello, World!'");}}Java 区分大小写关键字 public 称为访问修饰符(access modifier),用于控制程序的其他部分对这段代码原创 2022-12-04 22:11:49 · 1429 阅读 · 0 评论 -
《Java 核心技术卷1 基础知识》第二章 Java 程序设计环境 笔记
曾经有人说,作为Java程序员如果没有卷过这本书,就算不上是真正的Java程序员,那么我就也来卷卷它吧。下面是我的读书摘录笔记。原创 2022-11-20 20:41:26 · 494 阅读 · 0 评论 -
《Java 核心技术卷1 基础知识》第一章 Java程序设计概述 笔记
现在的即时编译器已经非常出色,可以与传统编译器现媲美,而且在某些情况下甚至超越了传统编译器,原因是它们有更多的可用信息。Java 是强类型的,编译器能捕获类型滥用导致的很多错误。编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有 Java 运行时系统,这些编译后的代码可以在许多处理器上运行。不同的厂商会选择不同的中央处理器(CPU),因此很重要的一点是这种语言不应与任何特定的体系结构绑定。不过,像 Gosling 在专访中谈到:“毕竟,语言只是实现目标的工具,而不是目标本身”。原创 2022-11-18 23:21:56 · 731 阅读 · 0 评论 -
SpringBoot在IDEA中同一个项目用不同端口启动
比如我们有一个 Test 项目,默认的端口是 8080,那么用 IDEA 可以启动它,但是再想启动它时貌似 IDEA 就没有办法了。比如,我们想测试 Nginx 的负载均衡,再比如我们想测试 OpenFeign 的负载均衡。添加后显示为 Unnamed,此时我们可以重命名,这里我们重命名为 TestApplication2,如下图。这样就可以点击 OK 按钮, 在工具栏的配置处可以看到有两个项目了,如下图。其实,IDEA 可以通过简单的配置来解决这样的问题,而且也非常的方便。原创 2022-11-04 22:15:15 · 9034 阅读 · 0 评论 -
使用 ELK 收集日志
在这种情况下,ELK 为我们提供了统一的日志管理解决方案,它能很好的支持 Logback 等日志框架,使得我们可以集中的管理不同应用输出的日志信息。创建完成后,返回 Kibana 的首页,选择 Discover 选项,切换到我们新建的 logstash-* 选项下,然后选择时间段,就可以看到相应的日志信息了。在上图中应用日志框架直接将日志发送给 Logstash,然后 Logstash 将接收的日志写入 ElasticSearch 中,开发人员通过可视化的 Kibana 可以进行日志的查询和分析。原创 2022-09-15 07:59:54 · 4369 阅读 · 2 评论 -
利用 AOP 记录接口日志
那这样的话,我们可以在每个调用接口地址的前后使用输出日志的方式来记录,就可以得到调用接口的入参和接口的返回值,从而有利于我们以后的调试了。我们可以使用 SLF4J 或者 LogBack 等日志框架,在调用接口时来输出一下入参和返回值,大致方法是在调用接口前调用 logger.info 输出入参,然后调用接口后再次调用 logger.info 输出返回值。在我们的后端项目中有很多要调用第三方接口的地方,而调用接口就免不了会因为传递给接口的参数有问题报错,或者对接口的返回值处理不全导致报错或后续的流程有问题。原创 2022-09-06 21:24:52 · 1528 阅读 · 2 评论 -
Redis的过期和淘汰是两回事儿
今天整理一下关于 Redis 的过期策略和淘汰机制,这两个东西看着很像,其实不是一回事儿。过期策略 我们在使用 Redis 当作缓存时,通常会给 Redis 的 Key 设置一个过期时间,被设置过期时间的 Key 在未过期时可以对其进行读取或更新操作,也可以主动将其删除。当其超过设置的时间后,它将失效。通过它的过期机制,可以完成很多功能,比如计数器复位、token 过期等。 那么,Redis 对已经过期的数据是进行如何处理,或者说是如何删除呢?在 Redis 中有两种策略来删除过原创 2022-07-06 22:32:15 · 977 阅读 · 0 评论 -
Java开发手册黄山版新增规约摘录
在 2020 年 8 月 3 日 推出的《Java 开发手册嵩山版》后历经了 18 个月阿里又推出了《Java 开发手册黄山版》。想必每个 Java 程序员应该都会关注阿里推出的《Java 开发手册》,个人觉得这份开发手册短小精干,非常实用。在整个手册中可以逐步地学到知识(手册背不下来,只能逐步的吸收,并尽量付诸实践),也可以从知识的表面理解一些更深层的思想。其实之前我做 PHP 的时候,就对这份手册非常的喜欢。因此手册有更新,我把更新的规约摘录在这里,方便阅读,方便学习。 ...原创 2022-03-28 20:00:46 · 1543 阅读 · 0 评论 -
为 JUnit 配置测试库
JUnit 用于单元测试,在测试删除时会影响开发中的数据,因此,我们可以为 JUnit 配置独立的数据库。在执行 @Test 注解的测试方法前,都会执行 @Before 注解的方法,那么就可以在 @Before 中配置测试库,这样就可以在不影响开发的库中数据的情况下,通过单元测试来测试删除数据的方法了。...原创 2022-03-13 22:00:29 · 1618 阅读 · 0 评论 -
Maven中如何通过反射获得方法的参数实际名称
在使用反射获取方法的参数实际名称时,可以使用 -parameters 参数,但是如果是 Maven 项目的话,则需要使用 Maven 的检查,配置如下: <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.原创 2022-03-05 20:57:41 · 798 阅读 · 0 评论 -
通过反射获得方法的参数实际名称
一般通过反射得到的方法参数名是 arg0、arg1 等,通过设置可以得到参数的实际名称原创 2022-02-20 22:49:54 · 795 阅读 · 0 评论 -
解决HTTP Status 405 - HTTP method POST is not supported by this URL 详解方案
跳转到的 servlet 中没有实现的 doPost 方法原创 2022-02-19 22:28:36 · 659 阅读 · 0 评论 -
Unable to translate SQLException with Error code ‘0‘, will now try the fallback translator
Unable to translate SQLException with Error code '0', will now try the fallback translator发生了这个报错,原因是 jdbc read only,因为在 Service 上增加了:@Transaction(readOnly = true)而在更新方法没有增加让只读为 false...原创 2022-02-10 22:47:28 · 4906 阅读 · 0 评论 -
Servlet 的继承关系
javax.servlet.Servlet --> javax.servlet.GenericServlet --> javax.servlet.HttpServlet原创 2022-02-06 21:29:20 · 1140 阅读 · 0 评论 -
JVM | 垃圾回收的算法
垃圾回收的算法标记遍历 GC-ROOT 把可达的对象进行标记清除将没有标记的对象进行清除整理移动存活的对象,按内存地址进行排列,将其后的内存进行回收复制提供同等大小的内存,将存活的对象复制到该块内存,原内存中的对象清除...原创 2022-01-29 22:22:05 · 658 阅读 · 0 评论 -
Activiti 挂起与激活任务
Activiti 挂起与激活任务的代码public void suspendProcess(String businessKey){ ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey); if (processInstanceQuery != null) { ...原创 2022-01-20 23:07:03 · 1535 阅读 · 1 评论 -
多线程笔记 | Future 接口功能
Future 接口提供三大功能(1)能够取消异步执行中的任务(2)判断异步任务是否执行完成(3)获取异步任务完成后的执行结果原创 2022-01-14 23:18:40 · 272 阅读 · 0 评论 -
多线程笔记 | 比对 Thread 和 Runnable
(1)继承 Thread 类实现多线程能更好地做到多个线程并发地完成各自的任务,访问各自的数据资源(2)通过实现 Runnable 接口实现多线程能更好地做到多个线程并发地完成同一个任务,访问同一份数据资源。多个线程的代码逻辑可以方便地访问和处理同一个共享数据资源,这样可以将线程逻辑和业务数据进行有效的分离,更好地体现了面向对象的设计思想(3)通过实现 Runnable 接口实现多线程时,如果数据资源存在多线程共享的情况,那么数据共享资源需要使用原子类型,或者需要进行线程的同步控制,以保证对共享数据原创 2022-01-13 23:48:18 · 245 阅读 · 0 评论 -
多线程笔记 | 线程的六种状态
线程的六种状态public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;}原创 2022-01-12 22:08:42 · 199 阅读 · 0 评论 -
多线程笔记 | 线程调度模型
线程调度模型分为两种:1.分时调度模型2.抢占式调度模型原创 2022-01-11 22:32:14 · 403 阅读 · 0 评论 -
多线程笔记 | Runnable 创建线程的优缺点
通过实现 Runnable 接口的方式创建线程目标类有以下缺点(1)不是线程类,而是线程的 target 执行目标类(2)不能直接访问 Thread 的实例方法,必须通过 Thread.currentThread() 获取当前线程实例,才能访问和控制当前线程通过实现 Runnable 接口的方式创建线程目标类有以下优点(1)避免由于 Java 单继承带来的局限性(2)逻辑和数据更好分离。通过实现 Runnable 接口的方法创建多线程更加适合同一个资源被多段业务逻辑并行处理的场景。在同一原创 2022-01-10 19:54:03 · 1217 阅读 · 0 评论 -
多线程笔记 | 创建线程的几种方法
创建线程的几种方法:1.Thread2.Runnable3.Callable 和 FutureTask4.Executors原创 2022-01-09 21:14:38 · 308 阅读 · 0 评论 -
多线程笔记 | 通过匿名类创建 Runnable 线程
书上说,执行一次性的线程,可以使用匿名的 Runnable 实例,但是,不知何时使用一次性的线程呢?public class CreateDemo2New{ public static final int MAX_TURN = 5; static int threadNo = 1; public static void main(String[] args) { Thread thread = null; // 使...原创 2022-01-08 17:54:05 · 753 阅读 · 0 评论 -
多线程笔记 | Thread 类
Thread 类位于 java.lang 包中1. 线程ID使用 getId 方法获取线程的 ID2.线程名称通过 getName 方法获取线程的名称通过 构造方法 或 setName 方法设置线程名称3.线程优先级通过 getPriority 获取线程的优先级通过 setPriority 设置线程的优先级4.线程的状态通过 getState 方法获取线程的状态5.线程的启动通过 start 方法启动线程6.获取当前线程的信息通过 currentThr原创 2022-01-07 21:56:48 · 949 阅读 · 0 评论 -
++ 运算符线程安全否?
写个简单的例子public class TestThread implements Runnable { public static int count = 0; @Override public void run() { for (int i = 0; i < 100_0000; i++) { count ++; } System.out.println("end..."); }原创 2022-01-06 22:16:03 · 307 阅读 · 0 评论 -
Activiti 流程发布
Activiti 流程发布的调用 repositoryService 的 createDeployment 即可@Testpublic void deploy() { Deployment deploy = repositoryService.createDeployment() .addClasspathResource("processes/LeaveProcess.bpmn") .addClasspathResource("process原创 2021-12-30 20:49:14 · 850 阅读 · 1 评论 -
Activiti 实现监听器
Activiti 实现监听器可以在执行到某个节点时触发相应的代码,这里实现一个执行监听器。实现执行监听器,实现 ExecutionListener 接口类,并实现 notify 接口方法即可。notify 接口方法有一个参数 DelegateExecution execution,该参数可以获取流程相关很多信息。...原创 2021-12-29 22:25:21 · 1469 阅读 · 0 评论 -
大数据 | HDFS 如何实现故障自动转移
为什么需要自动故障转移 在 HDFS 2.x 集群的 HA 模式下通常会有两个 NameNode 用来进行记录元数据,其中一个是主节点(Active),另外一个是备节点(Standby)。主备之间的数据同步通过 JournalNode 节点来充当中介,从而完成了主备节点之间数据的最终一致性。 当 NameNode 的主节点宕机后,通过命令可以切换到它的备节点成为主节点,使用命令进行切换需要人工的参与,虽然这样可以解决HDFS高可用的问题,但是这样的切换还是比较繁琐...原创 2021-12-28 19:22:34 · 1735 阅读 · 0 评论 -
Redis | 事物源码阅读 —— watch
上次阅读事务的源码时,主要阅读了multi、exec 和 discard 相关的命令,文章地址如下:Redis | 事务源码阅读,这次把上次没有看完的部分看接着看一下。Redis的 watch数据结构 关于watch 存在于几个数据结构当中,基本上在redisServer、redisCient 和 redisDb 当中,它们大致的关系如下: 该示意图是一个大致的示意图,不太保证准确。其中,dict 用于保存监视的key,而 dict ...原创 2021-12-27 22:24:12 · 507 阅读 · 0 评论 -
ZKFC 为什么和 NameNode 在一个主机
因为 ZKFC 需要监控 NameNode 服务,从而完成故障自动转移,因此 ZKFC 需要和 NameNode 在同一台主机,如果它们不在同一台主机,那么 ZKFC 和 NameNode 可能出现网络故障,从而导致无法进行有效监控。...原创 2021-12-26 19:14:11 · 1102 阅读 · 0 评论 -
ZooKeeper 集群搭建
目录ZooKeeper 简介ZooKeeper的安装模式ZooKeeper 集群的部署(1)上传 ZooKeeper安装文件(2)配置 ZooKeeper 的配置文件(3)复制 ZooKeeper安装信息到其他节点(4)修改其他节点配置(5)启动 ZooKeeper(6)查看启动状态(7)客户端连接服务器总结ZooKeeper 简介 ZooKeeper 是一个分布式应用程序协调服务,主要用于解决分布式集群中应用系统的一致性问题。Zo...原创 2021-12-25 19:37:55 · 1384 阅读 · 0 评论 -
添加 jar 包到 Maven
mvn install:install-file -DgroupId="com.jeesite" -DartifactId=jeesite-module-filemanager -Dversion="4.1.9-SNAPSHOT" -Dpackaging=jar -Dfile="jeesite-module-filemanager-4.1.9-SNAPSHOT.jar"-DgroupId 对应 POM 文件中的 groupId-DartifactId 对应 POM 文件中的 artifactId.原创 2021-12-20 19:20:22 · 495 阅读 · 0 评论 -
Activiti 中几个重要的类
RespositoryService 流程仓库 Service,用于管理流程仓库,例如:部署、删除,读取流程资源RuntimeService 运行时 Service,可以处理所有正在运行状态的流程实例,任务等TaskService 任务 Service,用于管理,查询任务,例如,签收、办理,指派等HistoryService 例是 Service,可以查询所有例是数据,例如,实力流程,任务,活动,变量,附件等...原创 2021-12-19 21:02:20 · 345 阅读 · 0 评论 -
Activiti 启动时创建库的配置
spring: activiti: database-schema-update: truedatabase-schema-update 的配置项有 4 个值,分别是:false:默认值,Activiti 启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常,生产环境用true:Activiti 启动时会对数据库中所有表进行更新操作,如果表不存在,则自动创建,开发时用cre原创 2021-12-18 12:47:17 · 2730 阅读 · 0 评论 -
Redis | 慢查询
目录慢查询关于慢查询的配置慢查询相关的命令命令演示查看慢查询的配置参数设置慢查询配置参数随便测试几条命令查看 Redis 记录的慢查询数量查看慢查询总结 MySQL 中存在慢查询,Redis 中也存在慢查询,Redis 的慢查询是命令执行超过设定阈值的查询就是慢查询。我们来整理一下。慢查询 Redis 会记录命令执行时间超过设定阈值时间的命令,这里的慢查询说的是命令执行慢,并非是 I/O 慢。 一般情...原创 2021-12-17 20:45:05 · 2114 阅读 · 0 评论 -
Spring 中事务传播行为
事务传播行为是指方法之间的调用事务策略的问题,在理解数据库的事务时,我们一般时希望事务能够同时成功或同时失败。但是在写代码的时候并非如此。如果在进行批处理时,其中的一条处理失败了,我们只希望失败的这条记录发生回滚,而不是因为一条处理失败使得所有之前的处理都回滚,这样就不可取了。在 Spring 中传播行为的类型有 7 种,分别是,Propagation.REQUIRED、Propagation.REQUIRES_NEW、Propagation.SUPPORTS、Propagation.NOT_SUPPO原创 2021-12-16 16:56:42 · 584 阅读 · 0 评论 -
JeeSite 4 记录停用启用笔记
增加启用停用的按钮if (row.status == Global.STATUS_NORMAL){ actions.push('<a href="${ctx}/xxx/xxx/disable?suppliersId='+row.suppliersId+'" class="btnList" title="${text("停用")}" data-confirm="${text("确认要停用吗?")}"><i class="glyphicon glyphicon-ban-cir原创 2021-12-15 23:26:10 · 529 阅读 · 0 评论 -
@Transaction注解配置项笔记
Spring 中有编程式事务和声明式事务,其中声明式事务时一种约定型的事务,其保证在代码发生异常时可以进行回滚,从而保证数据的一致性。声明式事务可以使用 @Transaction 注解来进行配置,其配置项有以下几项,分别是:value、transactionManager、isolation、propagation、timeout、readOnly、rollbackFor、roolbackForClassName、noRollbackFor 和 noRollbackForClassName。其中,最原创 2021-12-14 21:04:04 · 969 阅读 · 0 评论 -
HDFS 在 HA 模式集群下 JournalNode 节点的作用
目录一、HDFS两个 NN 同步哪些数据二、两个节点同步数据的数据一致性问题三、HDFS 中的 JournalNode 节点四、HDFSHA 模式架构图五、总结 HDFS 在非 HA 模式的集群下,NameNode 和 DataNode 是一个主从的架构。在这样的主从架构之下只有一台 NameNode。一台 NameNode 的好处是无需因为元数据的同步而考虑数据的一致性问题。但是,只有一台 NameNode 也会有很多的坏处,因为,单台 NameNode ...原创 2021-12-13 20:36:14 · 6929 阅读 · 2 评论