八大排序算法(上)
排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。
排序的分类 1.内部排序:
指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。
2.外部排序:
数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。
3.常见的内部排序算法:
冒泡排序冒泡排序(Bubble Sorting)的基本思想是:通过待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水滴的气泡逐渐向上冒。
一句话概括:先找大的,找到了就按先后顺序往末尾移动。
思路很简单,就是把在前面通过比较相邻的两个数,遍历数组找到最大的,移动到数组的末尾
123456789101112131415public static int[] bubbleSort(int[] array){ int temp = 0; boolean flag = false; for (int i = 0; i < ...
JUC并发编程系列(四)
JUC并发编程系列(四)17.Volatile
1.保证可见性
1234567891011121314151617181920212223242526272829/** * Volatile的可见性 * @author 路飞 * @create 2021/1/20 */public class JMMDemo1 { private volatile static int num = 0; //主存中num已经置为10 但线程中未得到信息 陷入死循环 //加入Volatile 保证可见性 public static void main(String[] args) { new Thread(()->{ while (num == 0){ } }).start(); try { TimeUnit.SECONDS.sleep(2); } catch (Inte ...
JUC并发编程系列(三)
JUC并发编程系列(三)11.线程池线程池:三大方法、七大参数、四种拒绝策略
池化技术
程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术
线程池、连接池、内存池、对象池///….. 创建、销毁。十分浪费资源
池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。
线程池的好处:
1.降低资源的消耗
2.提高响应的速度
3.方便管理
使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者 “过度切换”的问题。
线程池:三大方法
其中Integer.MAX_VALUE约为21亿,FixedThreadPool是伸缩性的线程池,最小为1,最大为21亿,可想若创建21亿个线程,大量请求堆积,势必会造成内存溢出。创建一个线程的线程池又不能最大程度利用机器性能,所以阿里开发手册规定需要手动创建线程池!
下面我们先使用Executors来创建线程池,分析三种创建的底层
12345678910111213141516171819202122232425 ...
JUC并发编程系列(二)
JUC并发编程系列(二)6.八锁问题
1.两个sync 锁的对象是方法的调用者,按顺序调用 发短信 打电话
2.发短信休眠4S 依旧一样 按顺序调用
1234567891011121314151617181920212223242526272829303132333435363738394041/** * 8锁,关于锁的8个问题 * 1.两个sync 锁的对象是方法的调用者,按顺序调用 发短信 打电话 * 2.发短信休眠4S 依旧一样 按顺序调用 * 核心: 对象!!! * * @author 路飞 * @create 2021/1/18 */public class Test1 { public static void main(String[] args) { Phone phone = new Phone(); Phone phone1 = new Phone(); new Thread(() -> { phone.sendMes(); }, & ...
JUC并发编程系列(一)
JUC并发编程系列(一)会写四篇多线程和JUC相关的知识,干活满满,手把手调试,保姆级待遇!
1.什么是JUC?有着多线程的基础,就进一步学习Java关于并发操作封装的工具类,查看JDK1.8帮助文档可知:
2.回顾多线程知识创建线程的方法
1.继承Thread类,重写run()方法,调用start()
通过继承Thread实现的线程类,多个线程间无法共享线程类的实例变量。(需要创建不同Thread对象,自然不共享)
1234567891011121314151617181920212223242526/** *创建线程的方法:1.继承Thread类,重写run()方法,调用start() * @author 路飞 * @create 2021/1/23 */public class Demo01 extends Thread{ @Override public void run() { //run方法 线程体 for (int i = 0; i < 20; i++) { System. ...
SpringBoot集成JSR303
SpringBoot集成JSR303JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。
此实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
下面,我使用SpringBoot来详细讲解如何使用JSR303做数据校验
1.maven依赖123456789101112131415161718192021222324252627<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> < ...
SpringBoot之集成Redis
SpringBoot之集成Redis
Redis官网对Redis的介绍:
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic pa ...
SpringBoot之集成Swagger2
SpringBoot之集成Swagger2Swagger是一个简单但功能强大的API表达工具。它具有地球上最大的API工具生态系统,数以千计的开发人员, 使用几乎所有的现代编程语言,都在支持和使用Swagger。使用Swagger生成API,我们可以得到交互式文档, 自动生成代码的SDK以及API的发现特性等。
Swagger2可以利用注解快速、自动地生成接口文档页面,在前后端分离开发中起着重要作用,方便接口测试和调用!
效果图如下:
访问URL:
http://127.0.0.1:8010/swagger-ui.htm
可以看到API根据后端Controller分类,每个API都带有注释,详细注释了参数和响应体的内容,后端设计基于RESTful风格的API(之前已经讲到),开发效率是杠杠的。
1.构建RESTful API在使用Swagger2前我们需要有一个RESTful API的项目,SpringBoot创建RESTful API项目非常的方便和快速。
SpringBoot构建RESTful API极为简单,实际就是Spring MVC。
123456789101112131 ...
SpringBoot之实现RESTful接口
SpringBoot之实现RESTful接口REST,即Representational State Transfer的缩写,对这个词组的翻译是表现层状态转化。
RESTful是一种软件设计风格,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
SpringMVC对RESTful风格的接口有着天然的支持,本篇将讲述如何在SpringBoot中怎样写。
1.重要注解在讲述使用之前,想要理解SpringMVC的几个常用注解:
@Controller:修饰class,用来创建处理http请求的对象
@RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@RequestMapping:配置url映射
@PostMapping: 这个是@RequestMapping+POST方法的简写
@RequestHeader: ...
SpringBoot集成Mybatis的使用
SpringBoot集成Mybatis的使用
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs映射成数据库中的记录。
这里我使用原生的Mybatis,不使用Mybatis插件,来讲解SpringBoot如何搭建Mybatis环境,并编写接口测试案例。
Mybatis中文官网:https://mybatis.org/mybatis-3/zh/index.html
1.Maven依赖12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061<?xml version="1.0" encoding="UTF-8"?><project xmlns=" ...