- 博客(38)
- 收藏
- 关注
转载 数据库优化
一.数据库优化方案:sql语句和索引;数据表结构、系统设置、硬件效果:从左至右,由高到低;成本:从左至右,由低到高;如下图:优化方向:一. SQL以及索引的优化首先要根据需求写出结构良好的SQL,然后根据SQL在表中建立有效的索引。但是如果索引太多,不但会影响写入的效率,对查询也有一定的影响。二. 合理的数据库是设计根据数据库三范式来进行表结构的设计。设计表结构时,就需要考虑如何设计才能更有效的查询。数据库三范式:第一范式:数据表中每个字段都必须是不可拆分的最小单元,也就是确保每一列
2021-06-23 17:15:56
167
原创 mysql数据库
一.mysql整体架构图1、连接器(管理连接、权限验证)连接器负责跟客户端建立连接、获取权限、维持和管理连接,数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。建立连接的过程通常是比较复杂的,所以我建议你在使用中要尽量减少建立连接的动作,也就是尽量使用长连接。但是全部使用长连接后,你可能会发现,有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象
2021-06-23 16:56:32
137
原创 EasyExcel操作excel文件
EasyExcel官方文档:https://alibaba-easyexcel.github.io/index.html记一次使用easyExcel导出列表为excel文件: //因为要使用OutputStream所以需要HttpServletResponse @GetStatusMapping(path = "/export/multiCallList", statusCode = StatusCode.EXPORT_EXCEL_SUCCESS) @ApiOperation(va
2021-06-23 10:31:45
393
原创 java对象的分配过程
jvm对象分配过程:1.对象的分配大部分都是在堆中分配,但是不排除栈上分配。什么时候会在栈上分配呢?逃逸分析、标量替换。逃逸分析简述:如果一个对象没有指向外部引用(方法的返回值,赋值给静态变量或成员变量),则改对象没有逃逸,可以考虑栈上分配,反之则逃逸,对上分配。2.堆分配对象首先考虑eden分配,在eden中每个线程存在一个TLAB(线程本地分配缓冲区),为了提高分配效率,减少指针碰撞,优先考虑TLAB分配,TLAB是一块很小的内存区域,会存在内存你浪费。如线程a的TLAB为100kb,已经.
2021-05-14 10:35:28
515
原创 阿里云服务器被恶意脚本攻击的解决过程
1.阿里云服务器被恶意脚本攻击(挖矿脚本),导致cpu被打满,服务器卡顿,根本无法使用2.使用top查看各进程的内存和cpu使用情况,找到对应耗内存和cpu的进程id3.原本想使用kill -9 pid 杀掉对应进程,结果杀掉之后,立马自动重新开启了一个进程;4.使用 ll /proc/pid 查看进程的运行路径,各路径表示信息如下:cwd符号链接的是进程运行目录;exe符号连接就是执行程序的绝对路径;cmdline就是程序运行时输入的命令行命令;environ记录了进程运行时的环境变量;f
2021-05-08 17:26:39
6243
原创 RabbitMQ
RabbitMQ1.RabbitMq是什么?rabbitMq是一款开源的,Erlang编写的,基于AMQP协议的消息中间件可用用来:解耦、异步化、削峰。2.什么是AMQP协议?高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。特点:可传递消息,不受不同开发语言的限制。3.rabbitMq的优缺点优点:解耦、异步化、削峰。解耦:如有两个服务,订单服务和库存服务,用户下订单之后会调用库存服务扣减库存。如果库存服务挂了,会导致订单服务不可用,强耦合。引入消息中
2021-02-25 17:29:39
180
原创 斐波那契查找
斐波那契查找(黄金分割法)/* 对F[k-1]-1的理解: * (1)F[k]=F[k-1]+F[k-2] F[k]-1=(F[k-1]-1)+(F[k-2]-1)+1 * 说明:只要顺序表长度为F[k]-1,则可以将表分为F[k-1]-1和F[k-1]-1两段,而中间位置为 * mid=low+F[k-1]-1 * (2)类似的,每个子段也可以用相同放式分割 * (3)但顺序表长度n不一定等于F[k]-1,所以需要将原来顺序表长度n增加至F[k]-1,这里K值只要能使F[k]-1恰好大于等于n
2021-01-25 16:24:45
190
2
原创 查找算法
线性查找、二分查找和插值查找public class Search { public static void main(String[] args) { int[] array = {1,3,100,100,300}; System.out.println(seqSearch(array,100)); System.out.println(binarySearch(array, 0, array.length - 1,100));
2021-01-25 15:29:14
70
原创 归并排序
归并排序public class MergeSort { public static void main(String[] args) { int[] array = {-1,10,8,100,72,33,46}; mergeSort(array, 0, array.length - 1, new int[array.length]); System.out.println(Arrays.toString(array)); } /
2021-01-25 15:16:34
85
原创 快速排序
快速排序public class FastSort { public static void main(String[] args) { int[] array = new int[]{-1, 100, 20, 25, 90, -9, 0, 18}; fastSortDesc(array, 0, array.length - 1); System.out.println(Arrays.toString(array)); fastSo
2021-01-22 17:59:12
82
原创 基数排序----桶排序的扩展
基数排序public class RadixSort { public static void main(String[] args) { int[] array = {0,-1,10,7,20,60,11}; radixSortDesc(array); radixSortAsc(array); } /** * 基数排序:降序 * @param array */ public static v
2021-01-22 17:16:03
151
1
原创 希尔排序
希尔排序:是对直接插入排序的优化 public static void main(String[] args) { int[] array = {-1, 9, 7, 6, 100, 60, 35}; shellSortDesc(array); shellSortAsc(array); } /** * 希尔排序 降序 * * @param array */ public static v
2021-01-22 16:26:05
93
原创 选择排序
选择排序 public static void main(String[] args) { int[] array = new int[]{10,0,-3,100,20,11,-9}; selectSortDesc(array); selectSortAsc(array); } /** * 选择排序 降序 * @param array */ public static void selec
2021-01-22 15:59:40
83
原创 直接插入排序
排序算法-------直接插入排序 public static void main(String[] args) { int[] array = {-1, 10, 0, 8, 9, 6, 7, 3}; insertSortDesc(array); insertSortAsc(array); } /** * 插入排序:直接插入排序 降序 * @param array */ public stat
2021-01-22 15:35:06
101
原创 排序算法-----冒泡排序
排序算法-----冒泡排序public class BubbleSort { public static void main(String[] args) { int[] array = {-1, 0, 18, 25, 99, 10}; bubbleSortAsc(array); bubbleSortDesc(array); } /** * 冒泡排序:降序排序 * * @param array
2021-01-22 15:15:29
64
原创 漫谈clone()方法克隆对象
一.什么是clone clone()方法是Object类中的方法,使用此方法可克隆对象。在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并且此后对object2任何改动都不会影响到object1中的值,也就是说,object1与object2是两个独立的对象,但object2的初始值是由object1对象确定的。在Java语言中,用简单的赋值语句是不能满足这种需求的。要.
2020-10-26 12:18:46
544
原创 java集合框架
1.集合框架 ①Collection和Map为最顶层接口 List(存储有序可重复数据)和Set(存储无需不可重复数据)接口都继承Collection接口 List的主要实现类有ArrayList、LinkedList、Vector;Set的主要实现类有HashSet、LinkedHashSet、TreeSet;Map的主要实现类有HashMap、TreeMap、LinkedHashMap、HashTable。 ②Array...
2020-10-22 11:42:04
97
原创 SpringMvc运行原理
一.springMVC框架的主要组件: 1.前端控制器DispatchServlet; 2.处理器映射器:HandlerMapping; 3.处理器适配器:HandlerAdapter 4.处理器:Handler 5.视图解析器:ViewResolve二.spingMvc运行原理示意图 三.运行原理...
2018-10-17 14:07:30
374
原创 java代理模式:静态代理VS动态代理
一.静态代理:静态代理说白了就是在程序运行前就已经存在代理类的字节码文件,代理类和原始类的关系在运行前就已经确定。 静态代理的特点:1.目标对象即被代理对象一定要实现接口;2.代理对象,要实现与目标对象一样的接口。 //接口 public interface UserDAO { void save(); } //目标对象即被代理类 pu...
2018-04-27 14:33:00
128
原创 POI导出数据为Excel文件
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.lang.reflect.Method;import java.net.URLEncoder;import java.text.DecimalFormat;imp...
2018-04-26 09:43:37
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人