以往对于Spring,或者SpringBoot,都只作为纯粹的开发工具,却并未去了解背后的原理。对于Spring Cloud,更是没有实际上手使用过。

第四次柚子班开篇从Spring/SpringBoot/SpringCloud讲起。

Spring生态简介

Spring

Spring是一个生态体系(也可以说是技术体系),是集大成者,它包含了Spring Framework、Spring Boot、Spring Cloud等(还包括Spring Cloud data flow、spring data、spring integration、spring batch、spring security、spring hateoas),可以参考链接:https://spring.io/projects,如下图所示。

Spring Boot

我们看看官方对Spring Boot的定义:

Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring. Spring Boot takes an opinionated view of building production-ready applications.

即Spring Boot为快速启动且最小化配置的spring应用而设计,并且它具有用于构建生产级别应用的一套固化的视图。这里的固化的视图,其实就是1Spring Boot的约定,Spring Boot的设计理念之一就是约定大于实现。

Spring Cloud

Spring Cloud事实上是一整套**基于Spring Boot的微服务解决方案**。它为开发者提供了很多工具,用于快速构建分布式系统的一些通用模式,例如:配置管理、注册中心、服务发现、限流、网关、链路追踪等。


Spring Boot – Jetty配置

默认情况下,Spring Boot会使用内置的tomcat容器去运行应用程序,但偶尔我们也会考虑使用Jetty去替代Tomcat;
对于Tomcat和Jetty,Spring Boot分别提供了对应的starter,以便尽可能的简化我们的开发过程;
当我们想使用Jetty的时候,修改pom文件即可使用。

<dependency><groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId> <exclusions>  <exclusion>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-tomcat</artifactId>  </exclusion>  </exclusions>
</dependency>  <dependency>  <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

排序

从时间复杂度和稳定性两个角度来分析排序算法。

  • 平方阶 (O(n2)) 排序:各类简单排序:直接插入、直接选择和冒泡排序。
  • 线性对数阶 (O(nlog2n)) 排序:快速排序、堆排序和归并排序;
  • O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数:希尔排序
  • 线性阶 (O(n)) 排序:基数排序,桶排序。

  • 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。
  • 不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

现场手写了三种排序算法:冒泡排序、插入排序和快速排序。

冒泡排序

算法步骤:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public static void sort(int arr[]) {for (int i = 0; i < arr.length - 1; i++) {boolean flag = false;for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;flag = true;}}if (flag == false) {break;}}
}

插入排序

算法步骤:

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
  2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
public static void doInsertSort(int[] array) {for (int index = 1; index < array.length; index++) int temp = array[index];int leftindex = index - 1;while (leftindex >= 0 && array[leftindex] > temp) {array[leftindex + 1] = array[leftindex];leftindex--;}array[leftindex + 1] = temp;}
}

快速排序

  1. 从数列中挑出一个元素,称为 “基准”(pivot);
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
public class QuickSort {private static void quickSort(int[] arr, int low, int high) {if (low < high) {int index = getIndex(arr, low, high);quickSort(arr, low, index - 1);quickSort(arr, index + 1, high);}}private static int getIndex(int[] arr, int low, int high) {int tmp = arr[low];while (low < high) {while (low < high && arr[high] >= tmp) {high--;}arr[low] = arr[high];while (low < high && arr[low] <= tmp) {low++;}arr[high] = arr[low];}arr[low] = tmp;return low;}
}

柚子不幼稚--4th相关推荐

  1. 柚子壁纸为什么自动安装_一张壁纸能折射多少东西,侦探团成员壁纸信息大,灰原的最有意思...

    问:名柯中最有意思的组合是什么?答:少年侦探团. 没错在过去的23年间,名柯出现了无数场景型的角色,比如说灰原哀.基德.贝尔摩德等等,而在众多人物当中,却有这样一群人是以一个团体出现的,每次他们的到来 ...

  2. 职场:5种幼稚表现,好多工作十年的人还在犯

    5种幼稚表现,好多工作十年的人还在犯. 一.推心置腹,毫无保留. 这种情况常出现在刚入职场的大学生中,领导给几句关怀和鼓励,就拿领导当亲人,拿公司当家,问什么答什么,知无不言,言无不尽. 千万不要傻实 ...

  3. 柚子小姐,Happy Birthday

    [写在前面的话] 好像自己初老的年级了,而且是自己的生日,写的这么潦草有点对不起自己过去成长的一年吧.所以我决定好好写写我自己在过去一年的成长,并且用这个作为自己新的开端,现在自己又老了一点点,过去一 ...

  4. Spring in Action 4th 学习笔记 之 AOP

    前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...

  5. Java 内存分配——Thinking in Java 4th 读书笔记

    做开发多年,一直忙于项目,从没好好的整理知识,从现在开始,尽量每周多抽时间整理知识,分享在博客,在接下来的博客中,我将为大家分享我读<Java编程思想4th>英文版读书笔记,一来便于知识的 ...

  6. wps多人协作后怎么保存_剥开的柚子怎么保存 柚子剥开后可以放几天

    前段时间有个小伙伴私信我:柚不二,我买来的柚子可以放存多久?今天来回复大家来. 剥开的柚子如何储存 方式 一: 柚子块头较为大,一个柚子的瓜瓤够好多个人吃,有时候剥开多了,吃剩,这剥开后的柚子放几小时 ...

  7. eos和以太坊有什么关系_比特币、以太坊、柚子三者的关系

    爱我就要抱抱我,爱我就要亲亲我,爱我就要奶奶我.好吧.那我就今天奶一下EOS. 说起区块链,大多数的人,就会想起比特币.以太坊....... 其实这三个币种也是有着一丝联系,有了比特币,才有了以太坊. ...

  8. rust游戏解封了吗_柚子君宾馆爬墙听隔壁声,潇天傲解封不罢休!继续专场嘲讽散打哥...

    柚子君晚上从吴迪.张二嫂承包的"山头"下山,入住附近酒店. 当得知所开的房间隔壁就是师弟哲宇和女友小宝在住时,强烈要求换房间,因为晚上"床摇"声音实在太大了,自 ...

  9. 一个串口接2个设备_重庆市有2个大观镇,一个乡村旅游发达,一个特产柚子

    同名的乡镇是很常见的现象,就连一个市里就有很多同名的乡镇,在之前的文章里说过,重庆市有2个临江镇.2个义和镇等.今天继续看看,重庆市内两个同名乡镇--大观镇,一个属于南川区,一个属于梁平区,虽然名字相 ...

最新文章

  1. BCH接下来如何走?且看这场大会传达了什么思想
  2. 计算机音乐乡间小路,《乡间的小路课件》初中音乐湘文艺2011课标版七年级下册课件.ppt...
  3. 多路测量实时同步工作原理_MCC 134测量热电偶的工作原理
  4. mysql多源复制相同数据库名称_mysql数据库多源复制方案
  5. 智慧交通day02-车流量检测实现02:多目标追踪
  6. javascript 等待指定时间_javascript的单线程和任务队列
  7. 你的Parquet该升级了:IOException: totalValueCount == 0问题定位之旅
  8. likely() 和 unlikely()内建宏定义函数
  9. Delphi中的dll操作
  10. sublime编辑器修改默认的Tab缩进风格
  11. asus z99s xp驱动
  12. 施耐德 m340 编程手册_施耐德变频器学习之参数配置
  13. 我的世界java版海底神殿种子_我的世界海底神殿种子
  14. Debian和Ubuntu版本比较
  15. 手机用蓝牙键盘好使吗_手机也可以连接键盘,你知道怎么使用吗?
  16. overflow:hidden属性
  17. 题目:用D触发器带同步高置数和异步高复位端的二分频的电路,画出逻辑电路,Verilog描述。
  18. 内置式永磁同步电机IPMSM数学模型
  19. mp4 stsd/mp4a/esds 和 mp4 stsd/avc1/avcc
  20. 夏普第二季度亏损数十亿日元 光伏业务持续陷入苦战

热门文章

  1. 牛客网|名字的漂亮度
  2. SuSE8.1安装Chinput中文输入服务器(转)
  3. pytorch 搭建cnn resnet50网络进行图片分类 代码详解
  4. Navicat!OceanBase社区版新朋友来啦!
  5. 虚拟机安装linuxmint-21-cinnamon-64bit感受
  6. YUV 后面数字的含义_真空断路器工作原理及型号含义
  7. [工作积累] 大型世界的草渲染
  8. 聊聊「租房平台,虚假房源」
  9. 【小学教育论文】小学语文核心素养视野下的习作教学(节选)
  10. oracle srvctl命令,用srvctl命令配置service