自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 Servlet从初识到熟悉

Servlet基本认识Servlet的本质就是一个接口,有的人往往以为就是Servlet直接处理客户端的http请求,其实并不是这样,servlet并不会去监听端口;直接与客户端打交道是我们前面已经学过的Tomcat服务器。客户端发送请求到tomcat,它监听端口,请求到达tomcat,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。如下图就是整个

2020-12-13 22:57:00 407

原创 tomcat基本使用

Tomcat下载安装官网:https://tomcat.apache.org/download-90.cgi (这里是tomcat9的地址)目录结构bin:存储一些可执行的文件,包括tomcat的启动和停止。conf:配置文件lib:运行时需要依赖的jar包logs:运行时的日志文件temp:运行时的临时文件webapps:项目发布目录,里面一个文件夹代表一个web应用,里面的root是根应用。work:工作目录启动&关闭tomcat启动:startup.sh关闭:s

2020-12-11 00:38:10 705

原创 G1垃圾回收器看这篇就够了

为什么要发布G1?应用程序的业务越来越庞大,复杂,用户越来越多,那么STW的GC跟不上实际需求,因此不断的对GC进行优化,在JDK7引入了G1垃圾回收器。G1设定的目标是在延迟可控的情况下获得尽可能高的吞吐量。区域分代化(概述)因为G1是一个并行回收器,它把堆内存**分割成很多不相关的区域(Region)**使用不同的Region来表示Eden,幸存者0,幸存者1,老年代等G1 GC有计划的避免了在整个Java堆中进行全区域的垃圾收集。G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得

2020-12-08 23:24:02 867

原创 CMS垃圾回收器要点

概述CMS(Concurrent-Mark-Sweep)收集器,这款收集器是HotSpot虚拟机中第一款真正意义上的并发收集器,他第一次实现了让垃圾收集线程与用户线程同时工作。CMS收集器关注点是尽可能缩短垃圾收集时用户线程的停顿时间,停顿时间越短就越适合用户交互程序,良好的响应速度能提升用户体验。(低延迟)CMS的垃圾收集算法采用标记清除算法,并且也会Stop-the-world。工作原理初始标记:在这个阶段中,程序中所有的工作线程都会因为STW机制而出现短暂的暂停,这个阶段仅仅标记GC Ro

2020-12-06 18:15:49 180

原创 学习Git看这一篇

引入思考一下,在开发过程中,我们都会遇到那些麻烦,第一点就是在写代码的过程中突然断电了,那么代码没有备份怎么办,因此代码备份很重要,其次在写代码的同时我们需要不断的更新迭代,但是有时候又需要回退到某个版本,那么版本控制很重要,当项目很庞大时,需求开发肯定不能只靠一个人,那么协同工作很重要,如果某个人写错了代码,线上出现了问题,需要查看问题代码是谁写的,那么责任追溯很重要,那么如今市面上实现这些功能的两种产品分别是SVN以及Git。SVN与Git对比SVNSVN是集中式版本控制系统,代码版本库是集中放

2020-12-06 17:28:44 77

原创 单例模式(从不好到完美)

单例模式的定义:确保某一个类只有一个实例,而且这个类可以自行实例化,并向整个系统提供这个实例。最最简单的方法(饿汉模式):public class Singleton { private static final Singleton singleton = new Singleton(); // 通过将构造函数私有化,限制产生多个对象 private Singleton() { } // 通过该方法获取实例对象 public static Singl

2020-06-26 19:55:04 136

转载 线程安全与锁优化

线程安全定义: 线程安全的定义:当多个线程访问一个对象时,如果不用考虑这些线程在运行时的环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其它的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象的线程就是安全的。按“安全程度”由强至弱排序分为五类:不可变不可变的对象一定是安全的,即用final关键字修饰的变量和对象一定是安全的,如String类中的s...

2020-04-09 14:09:15 111

原创 通俗易懂的类加载机制(码出高效)

根据冯诺依曼定义的计算机模型,任何程序都需要加载到内存中才能与CPU进行交流基础要点java中字节码.class文件包含了各种类信息,但是它是在本地硬盘中存储着的,因此只有把.class加载到内存中,通过JVM运行,它才可以与CPU进行交流,从而才可以实例化类。ClassLoader就是负责提前加载.class类文件到内存中加载类时使用双亲委派模型(溯源委派加载模型),后文会提到...

2020-04-09 10:19:24 201

原创 Nginx安装与配置

nginx安装配置检查系统之前是否装过nginx,如果安装过就将其卸载yum remove nginx -y解决软件包的依赖问题yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel...

2020-04-03 11:13:36 87

原创 地图搜索(多源广度优先搜索)

题目你现在手里有一份大小为 N x N 的『地图』(网格) grid,上面的每个『区域』(单元格)都用 0 和 1 标记好了。其中 0 代表海洋,1 代表陆地,你知道距离陆地区域最远的海洋区域是是哪一个吗?请返回该海洋区域到离它最近的陆地区域的距离。我们这里说的距离是『曼哈顿距离』( Manhattan Distance):(x0, y0) 和 (x1, y1) 这两个区域之间的距离是 |x0...

2020-03-29 23:40:32 690

原创 单词的压缩编码(字典树)

字典树基本解释字典树又名前缀树,也叫Trie,字典树用户存储大量的字符串,相比HashMap的存储,字典树节省了大量的空间。如下图:(截图来自LeetCode)可以发现,令字典树的根节点为空,从根节点走到叶子节点,每一条路径都会构成一个单词,比如最左边的路径可以构成单词"to",最右边的路径可以构成单词"inn",当然如果不到根节点,也可以构成一个单词,比如最右边的"in",同时也可以发现...

2020-03-28 14:30:46 927

原创 回文子串类问题(回文子串数及最长回文子串)

问题一给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。实例输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".方法一可以发现,回文串特点就是每个回文串都有一个中心点,左右边是对称的,那么我们就可以以中心点为基点,向两边扩散遍历,如果左右的字符相等,那么,就可以...

2020-03-25 14:42:36 685

转载 Java集合常见面试题

1)说说常见的集合有哪些吧?答:Map接口和Collection接口是所有集合框架的父接口:Collection接口的子接口包括:Set接口和List接口Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等List接...

2020-03-10 19:49:28 252

原创 使序列递增的最小交换次数

题目我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格...

2020-03-03 16:37:02 897

转载 Docker概念

什么是容器?一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基...

2020-02-08 18:53:34 176

原创 Docker基础操作

一.CentOS安装Docker1. 卸载旧版本的Docker(确保环境干净)sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-...

2020-02-08 18:38:00 173

原创 MariaDB(MySQL)安装

前言MySQL和Mariadb的区别

2019-12-16 13:55:07 143

原创 virtualenv与virtualenvwrapper

前言如果使用Django开发过很多项目就会发现,不同的工程会依赖不同的库,比如第一个工程使用的Django2.1.4版本,第二个工程使用的Django1.1.4版本,难免会造成冲突,又或者当工程文件越来越多,就会装越来越多的模块,难免使得python模块越来越臃肿。所以在这里要介绍一款名叫virtualenv的工具,他的作用是可以在同一个系统下帮我们建立多个互不相同并且互不干扰的虚拟环境注...

2019-12-16 12:49:38 426

原创 Linux下安装Python3和Django

前言我们都知道在Linux中的软件包都是一个一个rpm可执行文件,并且安装软件的时候总会有很多的依赖关系,下面安装python3.8的时候采用的是源码编译安装的形式,因此也需要解决很多的依赖关系,当然我把安装所依赖的软件包全都列了出来,大家只需要复制粘贴安装即可,安装期间遇到了很多坑,下面也会将解决方案一一列出来编译安装三部曲第一步:首先解决安装依赖关系,需要安装以下软件包,复制粘贴即可...

2019-12-15 16:42:27 744

原创 解决Linux环境下yum与pip下载慢的问题

最近在使用yum安装linux软件和用pip3安装python模块的时候因为下载速度太慢总是下载失败,后来发现原来安装这些东西用的都是国外的源,因此将yum和pip都更改为国内的源一.更改yum源配置1. 找到yum源的老家在哪?cd /etc/yum.repos.d/进入到该文件夹时可以看一下有哪些yum源文件,所有以*.repo结尾的就是yum源文件2. 将原有的yum源放在...

2019-12-15 14:50:26 1416 1

原创 MySQL索引

索引的种类普通索引:加速查找主键索引:加速查找 + 不能为空 + 不能重复唯一索引:加速查找 + 不能重复联合索引(联合唯一):联合主键索引联合唯一索引联合普通索引-无索引:从前到后依次查找-有索引:创建额外的文件(某种格式存储)原理hash索引:索引表特点:索引表因为哈希值变成了无序的优点:找单值快缺点:找范围慢btree索引二叉树特点...

2019-12-11 19:22:23 87

原创 MySQL视图,触发器,存储过程等

视图给某个查询语句设置别名,日后方便使用视图是虚拟出来的,并非真实的物理表创建视图create view 视图名称 as SQL 修改视图alter view 视图名称 as sql删除视图drop view 视图名称调用试图select 视图名触发器当对某张表做增删改操作时,可以使用触发器自定义关联行为创建一个触发器在插入数据之前进行begin和en...

2019-12-10 21:04:15 98

原创 MySQL基础知识

1.数据库连接:默认:用户root创建用户:代码块1授权:权限 人常用命令show databases; 显示数据库use 数据库名称; 进入数据库show tables; 显示数据表select * from 表名; 显示表中的所有列select name,age,id from 表名; 查看相应列的数据创建用户create user 'alex'@'192...

2019-12-10 21:02:17 107

原创 leetCode-考场就座

一.题目在考场里,一排有N个座位,分别编号为0, 1, 2, ..., N-1。当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外,如果考场里没有人,那么学生就坐在 0 号座位上。)返回ExamRoom(int N)类,它有两个公开的函数:其中,函数ExamRoom.seat()会返回一...

2019-11-13 09:44:35 680

原创 TCP三次握手/四次挥手

一.基本概念1.TCP全名传输控制协议,是一种面向连接,确保数据在端到端之间进行可靠传输的协议。2.面向连接:在连接前端与端之间建立一条虚拟的链路通道。3.可靠传输:对数据的每一个字节进行编号,检验数据包的有效性,超时进行重传。4.避免因网络恶化影响数据传输的手段:滑动窗口,拥塞控制。二.TCP报头中的几个重要标志位1.序列号(32位,即seq = ?):本报文段第一个字节...

2019-11-08 18:54:50 95

原创 无符号位移运算注意

位运算相关解释位运算有三种,分别是带符号位移运算与无符号位移运算,其中带符号位移运算又分为左移(<<)和右移(>>),符号位均参与移动,只有负数进行左移时最高位补1,其它情况均在空位处补0,而无符号位移运算只有右移(>>>),并且向右移动时正负数的高位均补0,正数不断向右移动的最小值是0,而负数不断向右移动的最小值是1(想了很久为什么负数不断向右移动最...

2019-11-02 00:28:24 1130

原创 java-内部类

内部类定义:就是一个类的内部包含另一个类,即class里还有一个class。内部类的分类:成员内部类,局部内部类(匿名内部类)内部类的使用格式:修饰符 class 外部类名称 { 修饰符 class 内部类名称{ //... } //...}注意事项:1.内部类使用外部类,可以随意访问2.外部类使用内部类,需要借助内部的对...

2019-10-30 00:47:20 52

原创 排序算法-归并排序

一.归并排序基本思路归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。二.归并排序图解(转载)https://www.2cto.com/kf/201611/...

2019-10-06 21:48:35 130

原创 排序算法-快速排序

一.快速排序的基本原理快速排序分为以下几步:第一步:在数组中任意选取一个数作为基准数(pivot)第二步:通过处理,将数组中大于基准数的数都放在基准数的右边,小于基准数的数都放在基准数的左边。第三步:通过第二步,对基准数的左右两边再重复第一步和第二步的操作,不断重复,直到区间里只剩下一个或者没有元素为止。二.快速排序图解三.快速排序代码(Java)import ...

2019-10-05 23:59:14 149

原创 排序算法-冒泡排序

一.冒泡排序基本原理在无序区间中,通过相邻的数进行比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。二.冒泡排序图解三.冒泡排序代码(Java)import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { i...

2019-10-04 22:48:49 99

原创 排序算法-堆排序

一.堆排序基本原理堆排序实质上也是选择排序,即在无序区间选出最大的值放入到无序区间中,只是直接选择排序是通过循环无序区间来查找最大的元素,而堆排序是通过将无序区间建堆的方式来找出最大的元素,放入到有序区间中。二.堆排序代码(Java)import java.util.ArrayList;import java.util.Arrays;public class HeapSort...

2019-10-04 22:05:16 78

原创 排序算法-选择排序

一.选择排序基本思路选择排序的基本方法分为以下几步:第一步:将所需排序的区间分为有序区间和无序区间第二步:从无序区间中选出一个最大(最小)的元素,存放在无序区间的最后(或最前)第三步:遍历无序区间的所有元素,重复第二步,直到无序区间的元素全部插入到有序区间中,排序结束。该排序算法较简单 图解略二.选择排序代码(Java)import java.util.ArrayLi...

2019-10-03 23:24:37 108

原创 排序算法-希尔排序

一.希尔排序的基本思路希尔排序实质上是对直接插入排序算法的一种优化,希尔排序又称为缩小增量法排序基本思路:首先设置一个基准距离,将一个数组按基准距离分成若干个组,并对每一个组内的记录进行直接插入排序。然后不断缩小基准距离,重复上述分组和排序步骤,当基准距离等于1 的时,进行最后一次直接插入排序,而后排序结束。原理:当基准距离大于1时,都是在尽可能的让数组更快的接近有序,当基准距离等于1...

2019-10-03 22:46:48 100

原创 排序算法-直接插入排序

一.插入排序基本思路直接插入排序的基本方法分为以下几步:第一步:将所需排序的区间分为有序区间和无序区间第二步:从无序区间中取出一个元素,将其与有序区间的元素依次进行比较,找到合适的位置进行插入,使得有序区间依然有序第三步:遍历无序区间的所有元素,重复第二步,直到无序区间的元素全部插入到有序区间中,排序结束。二.插入排序图示三.直接插入排序代码(Java)impo...

2019-10-03 20:59:31 267

原创 Python-装饰器

一.装饰器引入def func(): print('我是一句话')1.如何输出上面这段程序的运行时间?在没学习装饰器之前一定会通过修改原函数来实现程序附加功能。import timedef func(): start = time.time() # 记录开始时间 print('这是一句话') end = time.time() # 记录结...

2019-08-08 12:44:32 95

原创 LeetCode-用队列实现栈

一.题目使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元素top() -- 获取栈顶元素empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty这些操作是合法的。你所使用的语言也许不支持队列。你可以使用 l...

2019-08-05 17:41:49 112

原创 LeetCode-有效的括号

一.题目给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。二.示例示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: fa...

2019-08-05 16:33:04 75

原创 LeetCode-复制带随机指针的链表

一.题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。二.输入输出示例输入:{"$id":"1","next":{"$id":"2","next":null,"random":{"$ref":"2"},"val":2},"random":{"$ref":"2"},"val":1}解释:节点 1 的值是 ...

2019-08-04 15:04:32 68

原创 Django初识

1.Django的安装#命令行pip3 install Django==1.11.11 (Django的版本号)安装完毕后输入:django-admin验证是否安装成功新建Django项目:django-damin startproject mysite#pycharm创建: 1.File--newproject--左侧选Django--修改项目路径,并勾选Pythonx.e...

2019-07-25 09:23:03 71

原创 Python字典操作

一.字典定义info = { "ZhangSan":"18", "LiSi":"20", "WangWu":"22"}#字典是无序的,并且key值是唯一的二.字典的基本操作print(info) #输出字典info["004"] = "小红" #添加元素print(info)info["0...

2019-07-03 13:50:03 314

空空如也

空空如也

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

TA关注的人

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