自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring

一: 什么是 Spring 框架?Spring是一个 控制反转和面向切面的容器框架.Spring 框架七大主要模块?1、Core. 是Spring的核心类库, Core实现了IOC功能。2、AOP. 是Spring的AOP库,提供了AOP(拦截器)机制,并提供常见的拦截器,供用户自定义和配置。3、orm. 提供对常用ORM框架的管理和支持,hibernate、mybatis等。4、Dao. Spring提供对JDBC的支持,对JDBC进行封装。5、Web. 对Struts2的支持。6、Con

2020-09-27 19:39:35 216

原创 Redis

Redis: 常用作企业级的 缓存中间件.缓存的优点:相较于数据库,缓存性能更高.(1) 缓存一般是以 key-value 的方式存储的. 不像数据库一样还有查询的条件因素, 所以查询的性能一般要比数据库高.(2) 缓存的数据是在 内存中存在的, 而数据库的数据是在磁盘中存储的. 因为内存的操作速度远快于磁盘, 因此查询效率会高很多.(3) 缓存更容易实现 分布式部署(一台服务器变成多台相连的的服务器集群), 而数据库一般比较难实现分布式部署. 因此缓存的负载和性能更容易平行扩展和增加...

2020-08-23 20:20:30 139

原创 MySQL行锁和表锁 存储引擎

1 数据库锁定机制简单来说, 就是数据库为了保证数据的一致性, 而使各种共享资源在被 并发访问变得 有序所设计的一种规则.2 行级锁定 (row-level). 使用行级锁定的主要是 InnoDB 存储引擎.行级锁定最大的特点就是锁定对象的 颗粒度很小, 所以发生锁定资源争用的概率也最小, 能够给予应用程序尽 可能大的并发处理能力 而提高一些需要 高并发 应用系统的整体性能.行级锁: 开销大, 加锁慢, 会出现死锁. 锁定粒度最小, 发生锁冲突的概率最低, 并发度也最高.3 表级锁定 (table

2020-08-14 16:28:29 238

原创 HashMap, HashTable, ConcurrentHashMap 的区别 TreeMap

1 HashMap, HashTable, ConcurrentHashMap 的区别.2 重点: HashMap 和 ConcurrentHashMap 各个版本 的实现细节及区别.HashMap 1.7HashMap 1.8ConcurrentHashMap 1.7ConcurrentHashMap 1.83 HashMap 是无序的, 线程不安全. 数组存储区间是连续的, 占用内存严重, 所以读取快, 写入慢.LinkedHashMap 是有序的, 线程不安全. 空间复杂度很小

2020-08-07 14:53:19 319

原创 栈和队列练习

1 括号匹配问题: 给定一个只包括 ‘(’ , ‘)’ , ‘{’ , ‘}’ ,’[’ , ‘]’ 的字符串, 判断字符串是否有效. public boolean isValid(String s) { // key 左括号. value 该左括号匹配的右括号 Map<Character, Character> map = new HashMap<>(); map.put('(', ')'); map.put('['

2020-07-18 16:18:21 124

原创 链表的练习

1 删除链表中等于给定值 val 的所有节点.public ListNode removeElements(ListNode head, int val) { if (head == null) { return null; } // 先处理中间节点,然后处理头部节点. // 1. 先删除中间节点的情况(非头部的情况) ListNode prev = head; // prev 始终指向 cur 的前

2020-07-18 15:41:01 178

原创 Map

1 搜索: 在大量的数据元素中找到某个特定的数据元素.2 搜索的数据称为关键字(Key),和关键字对应的称为值(Value),所以模型会有两种:(1) 纯 key 模型,即我们使用 Set 要解决的事情,只需要判断关键字在不在集合中即可,没有关联的 value.(2) Key-Value 模型, 即我们 Map 要解决的事情, 需要根据指定 Key找到关联的 Value.3 Map 的使用: public static void main(String[] args) { /

2020-07-02 17:04:00 225

原创 七大排序及其比较

1 树: 是一种非线性的数据结构,它具有以下的特点:每个结点有零个或多个子结点, 没有父结点的结点称为根结点, 每一个非根结点有且只有一个父结点.2 节点的度:一个节点含有的子树的个数称为该节点的度;树的度:一棵树中,最大的节点的度称为树的度;叶子节点或终端节点:度为0的节点称为叶节点;双亲节点或 父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或 子节点:一个节点含有的子树的根节点称为该节点的子节点;根结点:一棵树中,没有双亲结点的结点;节点的层次:从根开始定义起,

2020-06-30 19:21:21 299

原创 Linux基本指令

. 称为当前目录… 称为当前目录的上级/ 称为根目录相对路径: 指当前路径作为相对位置.绝对路径: 指从跟路径开始的.全局有关的.开头的是隐藏文件. -R/-r: 递归操作,多用于目录, 很多指令支持这个参数:对文件操作时,除非必须指定具体的文件名的指令, 其他情况可以使用 * 表示模糊匹配.~表示用户路径.tab: 对文件.目录自动补全(敲一次),如果有多个匹配,就敲两次显示所有的匹配文件/目录ctrl+c :结束指令或某个进程(当前窗口)q: 在很多分页显示输出时,可

2020-06-26 22:35:52 674

原创 JVM

JMM(java内存模型):1 线程私有区域:(1)程序计数器: 一块比较小的内存空间,是当前线程所执行的字节码的行号指示器.(2)虚拟机栈:也就是平时所说的栈,每个方法执行的同时都会创建一个栈帧用于存储局部变量、操作数栈、执行环境上下文和方法出口等信息.每一个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机栈中入栈和出栈的过程,随着方法的执行结束方法的栈也自然的被销毁.虚拟机栈为JVM执行的Java方法服务.可能会抛出StackOverFlowError异常和OutOfMemoryError (

2020-06-24 12:16:50 215

原创 数据库 Mysql及其优化

1 数据库操作字符串一般用单引号,且不区分大小写.(1)创建数据库:create database 数据库名;create database if not exists 数据库名 default charset utf8mb4; 如果没有该数据库就创建,默认字符集是utf8(2)查看都有哪些数据库:show databases;(3)使用数据库:use 数据库名;(4)删除数据库:drop database if exists 数据库名;2 (1)创建表:create tabl

2020-06-18 18:12:36 392

原创 Servlet+Http + Session Cookie

1 tomcat处理请求的流程客户端 localhost:8080/maven-test/login.html客户端 localhost:8080/maven-test/test?i=2资源包括:login.html这类型的是静态资源,也是通过静态资源里面的action=?找服务器后台资源 test这类是服务器后台资源tomcat服务器启动加载项目:(1)startup命令启动 (2)加载webapps路径下的项目–>扫描项目中使用了Servlet相关注解的类,所有S

2020-06-16 15:46:14 149

原创 HTTP协议

1 url格式: (1) 域名的方式:

2020-06-15 23:57:51 299

原创 网络原理之TCP/UDP IP

1 TCP/IP协议五元组:源ip+源端口号+目的ip+目的端口+协议号windows查看某个端口**: netstat -ano|findstr “想要查看的端口号”** ,会显示某个进程的pidlinux查看端口: netstat -anp|grep “端口号” ,显示pid.TCP/UDP协议头包括:(源端口+目的端口+长度+校验和+数据)2 传输层UDP: 特点: (1)无连接:知道对端ip和端口号就直接发送,不需要建立连接. (2) 不可靠:没有确认机制,没有重传机制,如果

2020-06-15 23:50:50 628

原创 网络原理初识

1 OSI七层模型应用层 应用程序 基于应用层协议来包装/解析数据 HTTP DNS NAT NAPT等表示层会话层传输层 操作系统 TCP/UDP网络层 系统+网卡驱动程序 IP 路由 路由器数据链路层 系统

2020-06-15 21:46:58 232

原创 项目的环境配置maven和tomcat 以及servlet的使用

1 开发相关的资源 注意事项. 资源: 开发工具,比如tomcat,配置文件,项目. 路径:不能带中文,空格,特殊字符,不要放在C盘(可能会因为文件操作权限导致一些操作失败)2 settings里面的settings.xml是Maven的全局配置文件, repository是Maven的本地仓库,里边包含依赖包(jar).3 创建Maven项目. GroupId: 组织名,个人名就使用个人名称(英文或拼音) ArtifactId 产品名 ,一般和项目名一样 Version 版本号.4 Maven的生命

2020-06-10 11:03:48 781

原创 多线程 初阶 + 高阶

1 在硬盘中的程序代码加载到内存中变为进程,同时传入参数,内存中运行代码的指令,最后在CPU中完成相应的计算. 进程是系统分配资源的最小单位,线程是系统调度的最小单位,一个进程内的线程之间是可以共享资源的.2 并发:一个CPU在一段时间之内,由操作系统调度,在多个不同进程之间来回切换(时间片轮转的方式),各个任务是采取"抢占式执行"的方式由系统调度执行的.并行:多个CPU在同一时间,同时有多个进程在运行. 多线程是实现并发编程的方式之一.3 多线程的使用场景:1.提高效率(前提是任务量较大时

2020-06-04 13:41:21 295

原创 二叉树及练习

1 二叉树的顺序存储:使用数组保存二叉树结构,即将二叉树用层序遍历的方式放入数组.这种方式一般只适用于完全二叉树,一般的二叉树会造成空间浪费比较严重.2 堆在逻辑上就是一个完全二叉树,在物理上保存在数组中,满足任意结点的值都大于其子树的结点的值.叫做大堆(最大堆),反之是小堆(最小堆).堆的作用是快速找到集合中的最值.3 向下调整和向上调整的前提是左右子树必须已经是一个堆,才能调整,这里是指定一个位置进行调整.时间复杂度(OlogN),(考虑到最坏情况)即完全二叉树的高度.4 建堆:时间复杂

2020-05-29 12:19:56 454

原创 栈和队列

1 栈Stack 后进先出,标准库中入栈push,出栈pop,取栈顶元素 peek操作都是在栈顶进行的操作,一般用顺序表实现.2 队列 Queue是一种特殊的线性表,先进先出,标准库中入队列offer:进行插入操作的一端称为队尾,出队列poll:进行删除操作的一端称为队头 取队首元素peek. 队列可以由数组或链表结构实现.3 循环队列 队列中有效元素的长度有两种情况. 当head和tail重合的时候,可能是空队列,也可能是一个满了的队列.4 双端队列 Deque 是指两端都可以

2020-05-28 21:30:13 396

原创 Collection接口之 List和Set

Collection collection=new ArrayList<>(); 泛型参数,collection里面包含着若干String对象,泛型参数必须是引用类型(包括自定制类型也是引用类型)public class Animal {private String name;}SeqList animals=new SeqList<>();<>是泛型的标志,括号里面的参数在实例化类时才确定.此时第二个<>里面的参数可以省略,类型是Animal.

2020-05-28 21:08:46 245

原创 Object类实现了哪些方法

1 clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2 getClass方法final方法,获得运行时类型。3 toString方法该方法用得比较多,一般子类都有覆盖。4 equals方法该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。5 hashCode方法该方法用于哈希查找,重写了equals方法一般都要

2020-10-14 20:55:55 464

原创 约瑟夫环

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); List<Integer> list = new ArrayList<>(); for (

2020-10-08 21:41:34 117

原创 贪心算法

贪心算法: 在对问题求解时, 总是做出在当前看来是最好的选择. 也就是说, 不从整体最优上加以考虑, 他所做出的是在某种意义上的 局部最优解.该算法存在的问题:(1) 不能保证求得的最后解是最佳的.(2) 不能用来求最大值或最小值的问题.(3) 只能求满足某些约束条件的可行解的范围.1 选择排序. public static void selectSort(int[] array) { for (int bound = 0; bound < array.length-

2020-09-20 12:01:22 327

原创 Spring

1 传统的开发步骤, 要配置很多xml文件.public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applications.xml"); //通过bean的名称获取 bean对象. bean的名称就是xml中bean的id String bit=(String)cont

2020-09-01 23:05:43 123

原创 线程/进程间的通信方式

1 什么是线程通信?多个线程在处理同一个资源, 并且任务不同时, 需要线程通信来帮助解决线程之间对同一个变量的使用或操作. 就是多个线程在操作同一份数据时, 避免对同一共享变量的争夺.2 为什么要线程通信?(1) 多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,并且我们希望他们有规律的执行, 那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据。(2) 当然如果我们没有使用线程通信来使用多线程共同操作同一份数据的话,虽然可以实现, 但

2020-08-30 23:56:03 295

原创 海量数据处理

给 40亿个 不重复的无符号整数, 没排过序. 给一个无符号整数, 如何快速判断一个数是否在这40亿个数中.1位图: 就是用每一位来存放某种状态, 适用于海量数据, 数据无重复的场景. 通常是用来判断某个数据存不存在.创建 byte 类型的数组, 由于是海量数据, 40亿*1bit 占用的内存不大, 可以在内存中运行. 通过先除后求余的方式, 找到具体的位置. 然后看该位置的值为1就是存在, 为0就是不存在.2 布隆过滤器: 可以用来判断某个数据存不存在, 是哈希表和位图的结合. (提高查询效率,

2020-08-19 16:16:12 127

原创 怎么杀死一个进程

1 管理员身份打开cmdnetstat -ano | findstr 80802 taskkill -pid 要关闭的进程号 -f

2020-08-14 22:09:16 344

原创 泛型

泛型.(1) 泛型是在 编译时 检查类型安全, 运行期间没有泛型概念. 编译期 自动进行类型转换, 避免在运行时出现 ClassCastException(类型转换)异常.(2) 泛型的本质是 参数化类型. (<>里面可以是任意引用类型, 包括自己写的类, 基础类型可以使用 封装类解决).(3) 泛型利用的是 Object类 是所有类的祖先类, 并且父类的引用可以指向子类对象的特性.public class A<T> { T value;

2020-08-06 23:35:47 95

原创 多线程的线程安全问题.

1 工作内存和主内存.(1) 主内存: 所有的变量都存储在 主内存中.(2) 工作内存: 每个线程都有自己独立的工作内存, 里面保存该线程使用到的 变量副本(主内存中该变量的一份拷贝).2 我们规定:(1) 线程对共享变量的所有操作都必须在自己的 工作内存 中进行, 不能直接从主内存中读写.(2) 不同线程之间 无法直接访问其他线程工作内存 中的变量, 线程间变量的传递主要通过 主内存 来完成.3 修改 线程A中的变量.(1) 把工作内存A中更新过的共享变量 刷新到主内存中.(2) 将主内存

2020-08-06 17:38:03 101

原创 BST的有序性

给定一棵二叉搜索树, 请找出其中的第k小的结点.思路: 按照中序遍历找.class TreeNode1 { int val = 0; TreeNode1 left = null; TreeNode1 right = null; public TreeNode1(int val) { this.val = val; }}public class DemoB { TreeNode1 KthNode(TreeNode1 pRoot, in

2020-07-31 14:34:14 117

原创 滑动窗口问题

输出所有和为S的连续正数序列, 序列内按照从小到大的顺序.public class DemoA { public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); int low = 1; int

2020-07-30 15:07:02 96

原创 数组中一个或两个数字不同

1 一个整型数组里除了一个数字之外, 其他的数字都出现了两次. 请写程序找出这个只出现一次的数字.思路: 0和两个相同的数字按位异或还是0. 0和一个数字按位异或得到该数字. public int singleNumber(int[] array) { int ret = 0; for (int x : array) { ret ^= x; } return ret; }2 一个整型数组里除了两个数字之外

2020-07-30 14:23:05 255

原创 二进制中1的个数

输入一个整数, 输出该数二进制表示中1的个数. 其中负数用补码表示.思路: 一个二进制中1的个数等于 该数 按位与 该数-1, 直到结果为0. 用count计算1的个数. public int NumberOf1(int n) { int count = 0; while (n != 0) { n &= (n - 1); count++; } return count; }

2020-07-28 13:36:42 67

原创 动态规划问题

1 一只青蛙一次可以跳上1级台阶, 也可以跳上2级. 求该青蛙跳上一个 n级 的台阶总共有多少种跳法.动态规划(dp) 思想. (注意区分于递归)1 定义状态. f(n): 青蛙跳上 第n级 台阶总共跳法.2 状态转移方程. f(n) = f(n-1) + f(n-2)3 设置初始值. f(0)=1 f(1)=1 f(2)=2 (f2设置与否都行).public class DemoA { public int JumpFloor(int target) { int[] d

2020-07-27 21:14:34 268

原创 斐波那契 和 阶乘

1 斐波那契的 递归算法. public static int Fib1(int n){ if (n == 1 || n == 2) { return 1; } return Fib1(n-1)+Fib1(n-2); }斐波那契的 迭代(非递归)算法. public static int Fib(int n) { if (n == 1 || n == 2) { return 1

2020-07-27 19:57:28 294

原创 左右最值最大差

给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0…K],右部分A[K+1…N-1],K可以取值的范围是[0,N-2]. 求这么多划分方案中,求左部分中的最大值减去右部分最大值的绝对值的最大是多少.思路: 只需用数组最大值减去数组两端较小的那个值即可.public class DemoA { public int findMaxGap(int[] A, int n) { int max = 0; for (int i = 0;

2020-07-27 13:42:22 149

原创 乒乓球筐

两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母. 如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”.思路: 借助 map 统计出每个盒子中的每种球的类别和数目. 然后遍历其中的一个 map 和另外一个 map 进行对比即可.public class Main { public static void main(String[] args) { Scanner sc = n

2020-07-26 20:08:26 138

原创 回溯法

输入两个整数 n 和 m, 从数列1,2,3…n 中随意取几个数, 使其和等于 m, 要求将其中所有的可能组合列出来.public class DemoA { static ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); static ArrayList<Integer> list = new ArrayList<>();

2020-07-26 15:11:31 220

原创 字符串加密解密

对输入的字符串进行加解密, 并输出.加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换, 同时字母变换大小写, 如字母a时则替换为B, 字母Z时则替换为a.当内容是数字时则把该数字加1, 如0替换1, 1替换2, 9替换0. 其他字符不做变化解密方法为: 加密的逆过程.public class DemoB { // 加密 public static char encryption(char c) { if (c >= 'a' && c

2020-07-26 13:19:12 485

原创 正则表达式及练习

正则表达式.坐标移动问题. https://www.nowcoder.com/questionTerminal/119bcca3befb405fbe58abe9c532eb29题目意思: 合法坐标为 A(或者D或者W或者S) + 数字(两位以内). 坐标之间以 ; 分隔. 非法坐标点需要进行丢弃, 如 AA10; A1A; YAD; 等.思路: 先将整个字符串用分号 “;” 进行分割, 这样就把每一个坐标给取出来了. 接下来对取出的每个坐标进行合法性判断和计算. 使用了正则表达式 "[0-9]{

2020-07-26 00:02:01 229

空空如也

空空如也

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

TA关注的人

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