设计模式?(Design Pattern)软件设计中普遍存在的各种问题,所提出的解决方案
目的:
代码重用性
可读性(代码具有规范性)
可扩展性(增加新功能,比较方便)
可靠性(增加新功能,对原先的功能没有影响)
低耦合、高内聚
七大原则(设计模式设计的依据)单一职责(singleResponsibility)1对类来说,一个类只负责一类职责(比如userDao)如果A类负责两个职责,则需要将A类的粒度分解为A1、A2
效果:
降低类的复杂度
提高类的可读性
降低变更引起的风险
接口隔离原则(Interface Segregation Principle)客户端不应该依赖它不需要的接口,也就是说一个类对另一个类的依赖应该建立在最小的接口上
思考:接口隔离其实是对一个接口的分解的过程(接口A拆分成A1、A2…)
依赖倒转原则(Dependency Inversion Principle)/【面向接口编程】what:
抽象不依赖细节,细节应该依赖抽象
高层模块不依赖底层模块,二者都依赖于抽象
使用接口或者抽象类去指定规范,具体实现则交给他们的实现类去完成
里氏 ...
学习春天の云①微服务?灵魂提问:什么是微服务?微服务是一种架构风格,是一种架构设计方式,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
威神么(为什么)要微服务,它的好处都有啥? 传统开发模式下,绝大多数的web应用都是单体架构的风格来进行构建,这就使得所有的接口,业务逻辑层,数据持久层全部都被打包在一个web应用中,并且布置在一台服务器上,使得不同的模块之前也高耦合在一起,这种开发模式使得多团队协作开发的开发成本极高。因此不难看出,如果在后期,项目的某个部分需要调整,就会导致“牵一发而动全身”的结果。
它的优点: 1.各个服务的开发、测试、部署都是相互独立的。可以针对某一个特定的服务进行更多的操作,比如负载均衡等。
当有一个新的需求加入时,传统项目需要结合各方面考虑影响等,微服务就不存在这样的问题,省事省力又省心。
3.使用微服务将项目拆分后,只需要保证对外接口的正常运行,大大降低了各个模块之间的耦合性,极大的提高开发效率。
...
学习春天の靴子(springBoot)ps:以下笔记内容主要搬运自尚硅谷(雷神)的笔记
Chapter1—自动配置原理1.1、依赖管理
父项目做依赖管理
123456789101112131415依赖管理 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version></parent>他的父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE&l ...
关于算法周预习作业的一些答案第二周
适合用分治法求解的问题一般具有哪些基本特征?
首先问题规模一般比较大,但是随着问题规模的缩小到一定程度便能够轻松解决
各个子问题之间相互独立,无公共子问题
分治法求解问题主要包括哪几个步骤?
分而治之(分解,求子问题的解,最后合并所有问题的解)
递归算法的算法框架?
寻找递归方程,确定递归出口n0,若问题规模超过n0,则将问题分解成子问题
分治策略若使用递归算法实现,如何使用主定理法推算其大 O?
合并排序算法基本思想?
将n个待排序的元素分成两个规模差不多的子数组,如果子数组不为单元素则继续分解。因为单元素数组默认已经排好了序,这时候再将相邻的两个数组两两合并,最后得到结果
合并排序算法解题步骤?
如何建立递归方程分析合并排序算法的时间复杂性?
由T(n)=aT(n/b)+f(n)得,规模为n的问题被分为两个规模为n/2的子问题,即a=2,b=2,因此k=1。所以T(n)=O(nlogn)
二分搜索是如何完成折半查找的?
有手就行
如何分 ...
临时抱佛脚之数据库面向死记硬背的Oracle数据库
因为懒得打开学习通
第一单元:实例
Oracle进程结构中完成更新控制文件与数据文件,使其同步并触发DBWR进程,使其将脏缓存块写入数据文件中的进程是( )。—后台进程CKPT
当Oracle服务器启动时,下列哪种文件不是必须的( )。—归档日志文件
( )是数据库数据字典的所有者。—sys
在同一个表空间中,可以有多个但是不会存在重复的是()—文件号
可以在Oracle 11g服务器的安装目录下的( )文件中查看Oracle11g服务器的各种参数的使用情况。—initorcl.ora
Oracle数据库的实例由( )组成。—SGA(系统全局区)和后台进程
以下内存区不属于实例的是( )。—PGA
如果服务器进程无法在数据缓冲区中找到空闲块,为添加从数据文件中读出的数据块,则系统会启动如下哪一个进程( )。—DBWR
数据字典表和视图存储在( )。—SYSTEM表空间
Bob试图正常关闭数据库,Oracle显示实例处于空闲状态,他试图启动数据库,Oracle显示数据库已启动,Bob最好使用( )命令关闭数据库。—ABORT
Oracl ...
Throw the problem事情是这样的,有这样一群捣鼓矩阵的人,他们模拟数的运算法则,整出了矩阵的运算法则。他们发现矩阵A和矩阵B相乘得到矩阵C要做很多次乘法。两个矩阵相乘,计算这个有手就行。三个矩阵相乘还可以接受,四个的话就有点慌,五个的话就有点吃力,六个、七个…既然人算费力,那就交给鸡算,呸,机算。虽然说不用人算,但是矩阵链的长度一上来,电脑也顶不住啊。这帮人开始思考能不能尽可能用最少的乘法次数来实现矩阵的连乘,他们联想到数的运算法则的乘法结合律,因为相邻的矩阵之间是可以若干个组合的。如果给他们加上括号以此来决定乘法的优先级,岂不美哉?光想没用,那就是试试呗。这一试就试出“问题”了。他们发现通过这种“结合运算”的方式,都能得到最终的结果,但是中间用到的乘法次数多少却是“两极分化”!
举个栗子 :比如 A1 = 10x100,A2 = 100x5,A3 = 5x50,假如矩阵组合的方式为 ((A1A2)A3) 那么总的相乘次数应为 101005+10550 = 7500,而假如矩阵的组合方式为 (A1(A2A3)) 那么相乘的次数应 ...
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768public class seriesOfWork { static int n = 5;//作业数量,其实用不到。。。 static int[] x = {1, 2, 3, 4, 5};//初始作业调度顺序 static int[] bestx = new int[x.length+1];//最优的作业调度顺序 static int f1;//机器1完成时间 static int[] f2 = new int[x.length+1];//机器2完成时间 static int f;//当前完成所有作业的时间 static int bestf=9999;//最优的时间 static int[][] chart = { { ...
开头霍夫曼树的相关概念就不一一赘述了,直接上代码。放心,必要的地方我会加上我自己都看不懂的注释
Mr.Winterの实验要求:
读取一个文本文件,并统计出每个字符的出现次数。随后将一个字符的出现次数作为字符的权值(霍夫曼树中的叶子节点的权值)
将字符和其权值保存起来(链表?or动态数组?)
利用得到的所有字符,构建霍夫曼树(拿到霍夫曼树的根节点)
对每一个字符进行霍夫曼编码,并得到一张编码表
根据编码表,输入一个编码后能够对其进行解码并返回其所对应的字符
步骤读取文本文件并统计各个字符的出现次数(权值)123456789101112131415161718192021222324252627282930313233343536373839404142434445package readtxt;import java.io.*;import java.util.HashMap;import java.util.Map;public class ReadTxt { /** * 传入txt路径读取txt文件 * * @param txtPath ...
由于原来的(书上的)算法我实在是看不懂…所以我想仿照我之前解决全排列的思路(逐个选择法)解决这个问题
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253import java.util.Arrays;public class Loading { static int[] w={5,2,1,3}; int n=4,c1=10,cw=0,bestw=0; static int[] isVisit=new int[w.length]; /*** * * @param c1 第一艘船的最大载重 * @param w 数组,用于记录每件货物的重量 * @param cw 当前最大载重 * @param bestw 最佳载重 * @param isVisit 整形数组(相当于解空间的其中一个解),若将货物搬上第一艘船,则用1表示,否则置为0,数组一开始初 ...
线性时间选择问题描述:在一个的数组中(数组中的元素有n个),查找第k小的数。
常规思路:若数组有序,直接输出arr[k-1]即可…
但是…如果一个数组是无序的话,上面的方法就不太行了,因此需要引入线性时间选择。线性时间选择可以模仿快速排序,基本思想是对输入数组进行递归划分,与快速排序不同的是,它只对划分出来的子数组之一进行递归处理
参数说明:
p:数组最左
r:数组最右
k:要查找的第k小的元素
解题步骤:
先将数组按五个一组的划分,共有n/5列
然后利用任意排序方法求出每一列的中位数
将每一列的中位数按照顺序与原数组的前几位元素互换位置
再递归求解出中位数的中位数,也就是基准量x
用得到的基准在整个数组使用快速排序,得到x在数组中的下标i(第j=i+1-p小的数)
将k和j进行比较,若k≤j,说明要查找的数在j的左边的数组,返回步骤一,继续递归
反之,则向j的右边的数组递归
不要说了不要说了,先上代码先上代码!123456789101112131415161718192021public class Select { public stat ...




