自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (2)
  • 收藏
  • 关注

原创 被你忽视的单元测试-理论篇

测试在软件开发中是至关重要的,在一些架构设计方法论中,测试甚至可以主导系统的架构设计(如TDD),从而进一步的保证了代码的可测试性。可维护和可读的测试代码对于提升单元测试覆盖率至关重要,当我们修改系统中的一些功能或进行重构时,这些单元测试又可以检测我们是否对功能进行了破坏。同时单元测试可以是优秀的代码文档,一个对系统的行为不了解的人可以通过单元测试快速了解各个类的目的和API使用方法

2022-10-08 15:47:22 409 1

原创 ForkJoinPool原理与实战

目录1. 介绍2. 原理解析2.1 work-stealing调度策略2.2 在JUC中的实现1)基本原理2)核心类3)ForkJoinPool4)ForkJoinTask3. 实战3.1 实现方法一:单线程循环累加3.2 实现方法二:ExecutorService多线程并发3.3 实现方法三:使用ForkJoinPool3.4 项目优化1. 介绍Fork/Join框架通过把问题以递归的方式划分为多个子任务,然后并行的执行这些子任务,等所有的子任务都结束的时候,再合并最终结果,通过这种方式来支持并发编程

2021-04-23 00:48:21 1295

原创 《Redis设计与实现》读书笔记

基本数据类型字符串SDS动态字符串定义struct sdshdr{ // 记录buf数组中已使用的字节的数量 // 等于SDS所保存字符串的长度 int len; // 记录buf数组中未使用字节的数量 int free; // 字节数组,用于保存字符串 char buf[];}例如"Redis"字符串:free属性的值为0,表示这个SDS没有分配任何未使用空间。len属性的值为5,表示这个SDS保存了一个五字节长的字符串。buf属性是一个char类型的数组

2021-03-31 18:28:27 171

原创 让线程按指定顺序执行的8种方法

一.前言本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。使用的方法如下:[1] 使用线程的join方法[2] 使用主线程的join方法[3] 使用线程的wait方法[4] 使用线程的线程池方法[5] 使用线程的Condition(条件变量)方法[6] 使用线程的CountDownLatch(倒计数)方法[7] 使用线程的CyclicBarrier(回环栅栏)方法[8] 使用线程

2020-06-17 20:42:08 2031 1

原创 使用SpringBoot自带组件实现定时任务

1.前言定时任务的使用,在开发中可谓是家常便饭了。定时发送邮件、短信;避免数据库、数据表过大,定时将数据转储;通知、对账等等场景。当然实现定时任务的方式也有很多,比如使用 linux下的 crontab 脚本,jdk 中自带的 Timer 类、Spring Task或是 Quartz 。相信你也有过如下的疑问:Spring Task 的 crontab 的表达式 和linux下的 cro...

2020-03-28 20:24:17 1354

原创 利用注解指定Spring启动时加载的bean

在开发的过程中,一个接口往往有多个实现类。但根据需求,不一定会使用到所有的实现类。以本人当前遇到的需求为例,一个系统不同的国家部署时,需要使用不同的实现类。在此给出基于注解的实现方法。1.注解定义@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Adapter { /** ...

2020-03-01 17:38:20 1508

转载 异常相关知识点梳理

一. 异常是什么异常是指阻止当前方法或作用域继续执行的问题。比如你读取的文件不存在,数组越界,进行除法时,除数为0等都会导致异常。一个文件找不到的异常:public class TestException { public static void main(String[] args) throws IOException { InputStream is = new...

2019-12-15 17:27:51 173

转载 Java并发之AQS

一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈bstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。以下是本文的目录大纲:概述框架源码...

2019-09-12 23:49:15 120

转载 @Transactional底层原理

一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:获取连接 Connection con = DriverManager.getConnection()开启事务con.setAutoCommit(true/false);执行CRUD提交事务/回滚事务 ...

2019-09-09 21:08:37 3101 1

原创 Java实现定时删除动态生成的文件

在工作中遇到一个需求,需要生成一些Zip压缩包供用户下载。为防止旧文件过多撑爆服务器,需要定期删除这些生成的文件。在实现中定义3分钟文件过期,需要被删除。文件地址缓存服务类此类将文件地址缓存起来,key=uuid,value=文件绝对地址。同时定义一个阻塞队列,保存文件生成的时间。定时删除通过Schedule来实现,每10秒钟进行一次扫描。CacheService.java@Compo...

2019-09-09 18:15:05 773

原创 SpringBoot开发常用配置总结

错误页面配置与全局异常处理全局错误页面配置方法一:基于框架默认配置使用框架默认的错误页面处理。使用ThymeLeaf模板时springBoot会自动到src/main/resources/templates/error/文件夹下寻找404.htm、500.html的错误提示页面。错误提示页面的命名规则就是:错误码.html,如404是404.html,500是500.html。...

2019-09-09 17:56:26 161

原创 Http中Content-Length与Transfer-Encoding区别

1. http/1.1协议中与chunked编码的相关字段1)Entity Body:entity-body只有在message-body出现时才会出现。通过对message-body的解码获得entity-body。transfer-encoding用于确保安全和信息的恰当传输。Entity-length:在应用任何transfer-encoding之前的message-body的长度。...

2019-09-08 11:14:33 882

转载 OOM 常见原因及解决方案

当 JVM 内存严重不足时,就会抛出 java.lang.OutOfMemoryError 错误。本文总结了常见的 OOM 原因及其解决方法,如下图所示。如有遗漏或错误,欢迎补充指正。1、Java heap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError:Javaheap space 错误(根据实际生产...

2019-08-28 20:28:39 183

原创 消息队列高可用性保证

RabbitMQ 的高可用性RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用性的,我们就以 RabbitMQ 为例子讲解第一种 MQ 的高可用性怎么实现。RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。单机模式单机模式,就是 Demo 级别的,一般就是你本地启动了玩玩儿的

2019-08-27 20:03:41 493

原创 Guava学习总结

Cacheguava cache是一个本地缓存。优点线程安全的缓存,与ConcurrentMap相似,但前者增加了更多的元素失效策略,后者只能显示的移除元素。提供了三种基本的缓存回收方式:基于容量回收、定时回收和基于引用回收。定时回收有两种:按照写入时间,最早写入的最先回收;按照访问时间,最早访问的最早回收。监控缓存加载/命中情况。集成了多部操作,调用get方式,可以在未命中缓存的时...

2019-08-25 10:08:48 517

原创 API网关——zuul

zuul是什么1. API网关在微服务架构中,通常会有多个服务提供者。设想一个电商系统,可能会有商品、订单、支付、用户等多个类型的服务,而每个类型的服务数量也会随着整个系统体量的增大也会随之增长和变更。作为UI端,在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变。网关就可以对外暴露聚合API,屏蔽内部微服务的微小变动,保持整个系统的稳定性。简单来说,API网关...

2019-08-12 14:33:21 188

转载 全网最全的Java并发面试题及答案

转载自公众号:Java面试那些事儿1、在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行时...

2019-08-07 16:17:01 164

原创 ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal解析

说起本地线程变量,我相信大家首先会想到的是JDK默认提供的ThreadLocal,用来存储在整个调用链中都需要访问的数据,并且是线程安全的。本文将详细介绍ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal,并剖析各自的优缺点。1.ThreadLocal详解ThreadLocal对外提供的API如下://从线程上下文环境中获取...

2019-08-01 18:37:18 482

原创 Java代码生成器——基于模板快速生成web项目结构

功能介绍根据数据库表的元数据生成支持Rest、RPC协议的工程服务(标准化的代码分层结构工程)。 加速新工程的建设。代码结构:生成代码的结构依赖于模板的定义。本工程中定义分为三个工程${projectName}-domain-api:接口层 - RPC接口API工程${projectName}-domain:领域层 - RPC接口实现(包含domain层 + 基础设施层)${proje...

2019-07-29 18:55:05 3061 1

原创 Spring-Boot写入、解析CSV,支持上传、下载

工作中遇到了将所有数据整合成CSV文件并下载、上传CSV文件并解析,这两个需求。现在把处理方法记录下来,作为总结。项目构建jar包引入CSV的解析和写入使用到的是commons-csv的包,pom中的定义如下 <dependency> <groupId>org.apache.commons</groupId> ...

2019-07-22 18:43:22 15624 3

转载 String使用不当可能导致内存泄露

String是Java中一个比较基础的类,每一个开发人员都会经常接触到。而且,String也是面试中经常会考的知识点。String有很多方法,有些方法比较常用,有些方法不太常用。今天介绍一个String使用不当可能导致内存泄露的问题,主要围绕其subString方法。围绕String和subString也有很多面试题,是比较重要的知识点。substring(int beginIndex, ...

2018-08-15 13:30:15 3019

转载 分布式锁的实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...

2018-08-07 10:30:46 98

转载 B-树,B+树与B*树的优缺点比较

B-树是一种平衡的多路查找(又称排序)树,在文件系统中有所应用。主要用作文件的索引。其中的B就表示平衡(Balance) B+树有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了。 B+树支持range-query(区间查询)非常方便,而B树不支持。这是数据库选用B+树的最主要原因。 比如要查 5-10之间的,B+树一把到5这个标记,再一把到10,...

2018-05-02 16:01:09 981

现代密码学 原理与协议 PDF 带目录

现代密码学 原理与协议 PDF 密码学领域专著 高清扫描版本

2017-11-12

实现单处理机下的进程调度程序

实验内容: 编写一个单处理机下的进程调度程序,模拟操作系统对进程的调度。 要求: 能够创建指定数量的进程,每个进程由一个进程控制块表示。 实现先来先服务调度算法:进程到达时间可由进程创建时间表示。 实现短作业优先调度算法:可指定进程要求的运行时间。(说明:对不可剥夺的短作业优先算法,当作业运行时间相等时,优先调度进程号小的进程执行;对可剥夺式的短作业优先算法,即选最短剩余时间的进程进行运行,在剩余时间相同的情况下,选择到达时间早的进程进行运行) 实现时间片轮转调度算法:可指定生成时间片大小。(说明:新进程到来时插入到就绪队列的队尾,当进程P运行完一个时间片时,若同时有进程Q到达,则先在就绪队列队尾插入新到达的进程Q,之后再插入进程P) 实现动态优先级调度算法:可指定进程的初始优先级(优先级与优先数成反比,优先级最高为0),优先级改变遵循下列原则:进程在就绪队列中每停留一个时间片,优先级加1,进程每运行一个时间片,优先级减3。(说明:本算法在优先级相同的情况下,选择到达时间早的进程进行运行) 测试用例格式如下: 输入:调度算法    进程号/到达时间/运行时间/优先级/时间片 输出:调度顺序/进程号/开始运行时间/结束运行时间/优先级 其中调度算法选项为:1----先来先服务,2----短作业优先,3----最短剩余时间优先,4----时间片轮转,5----动态优先级

2015-12-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除