自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 zset的好文章

zset

2021-09-15 10:41:30 134

原创 HTTPS连接的详细过程

HTTPS连接的详细过程

2021-09-14 15:03:56 470

原创 剑指offer—树

题目代号: 剑指 Offer 07. 重建二叉树题目描述:输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。测试用例:我的分析:1、因为之后我们需要一直知道每个节点在中序遍历中的位置,所以要把这个节点放入map中2、从前序遍历中拿出根节点3、找到根节点在中序遍历中的位置4、计算左子树的长度5、建立树,左子树递归,右子树递归(注意括号里的范围,左边界包括右边界不包括)代码:public TreeNode bui

2021-07-19 11:20:42 115 3

原创 剑指offer—动态规划

题目代号: 剑指 Offer 46. 把数字翻译成字符串题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。测试用例:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”我的分析:代码:public int tr

2021-07-16 18:02:31 114 1

原创 第14章—指针三剑客之二:树

14.1 数据结构的介绍作为(单)链表的升级版,我们通常接触的树都是二叉树(binary tree),即每个节点最多有两个子节点;树与链表的主要差别就是多了一个子节点的指针。14.2 树的递归树递归的写法与深度优先搜索的递归写法相同题目代号: 104 二叉树的最大深度题目描述:求一个二叉树的最大深度。测试用例:output:3我的分析:看左递归和右递归的最大值+1即可代码:public int maxDepth(TreeNode root) { if(root ==

2021-07-09 11:34:02 128

原创 第13章—指针三剑客之一:链表

13.1 数据结构的介绍链表是由节点和指针构成的数据结构,每个节点存有一个值,和一个指向下一个节点的指针,因此很多链表问题可以用递归来处理。不同于数组,链表并不能直接获取任意节点的值,必须要通过指针找到该节点后才能获取其值。同理,在未遍历到链表结尾时,我们也无法知道链表的长度,除非依赖其他数据结构储存长度。由于在进行链表操作时,尤其是删除节点时,经常会因为对当前节点进行操作而导致内存或指针出现问题。有两个小技巧可以解决这个问题:**一是尽量处理当前节点的下一个节点而非当前节点本身,二是建立一个虚拟节点

2021-07-09 10:56:33 140 4

原创 第12章—令人头大的字符串

12.1 字符串比较题目代号: 242 有效的字母异位词题目描述:判断两个字符串包含的字符是否完全相同测试用例:Input: s = “anagram”, t = “nagaram”Output: true我的分析:咱们搞一个数组或者hashmap来统计每一个字母出现的次数数组有个好处是直接就是26位的数组,这样数组每一位就应该对应一个字母出现的次数s这个字符串的字母统计去加个数t这个字符串的字母统计去减个数按道理来说,最后结果26个位置都应该是0,一旦某个位置不是0,那就代表肯定不

2021-07-08 16:53:59 150 2

原创 第11章—妙用数据结构

数组、栈、队列、hash表、集合11.1 数组题目代号: 448 数组中小事的数字题目描述:给定一个长度为 n 的数组,其中包含范围为 1 到 n 的整数,有些整数重复了多次,有些整数没有出现,求 1 到 n 中没有出现过的整数。测试用例:Input: [4,3,2,7,8,2,3,1]Output: [5,6]我的分析:我们遍历一遍数组nums,这样谁出现了,新数组中对应下标的位置+1;这样的话没有出现大的位置就一直是0第二次遍历,看位置是0的位置,就代表数字没出现代码:publ

2021-07-06 10:09:03 152

原创 第9章—巧解数学问题

9.1 公倍数和公因数例: 求567与405的最大公因数: 567 / 405 = 1 (余162) 405 / 162 = 2(余81) 162 / 81 = 2(余0) 即最大公因数是81,就是最终除尽的那个数//欧几里得算法(辗转相除): public static int gcd(int m,int n) {

2021-07-02 10:00:32 220 2

原创 第8章—化繁为简的分治法

8.1 算法描述三步走:1、“分”即为把大数组平均分成两个小数组;2、通过递归实现,最终我们会得到多个长度为 1 的子数组;3、“治”即为把已经排好序的两个小数组合成为一个排好序的大数组,从长度为 1 的子数组开始,最终合成一个大数组。8.2 表达式问题题目代号: 241 为运算表达式设计优先级题目描述:给定一个只包含加、减和乘法的数学表达式,求通过加括号可以得到多少种不同的结果测试用例:Input: “2-1-1”Output: [0, 2]在这个样例中,有两种加括号结果:((2-

2021-07-01 20:26:40 131 1

原创 第7章-深入浅出的动态规划

7.1 算法解释动态规划就是把一个复杂的问题划分成若干个子问题,依次划分,一层一层求解7.2 基本动态规划题目代号: 70 爬楼梯题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。测试用例:就两种情况最后一步走1个台阶 f(n-1)最后一步走2个台阶 f(n-2)所以 f(n) = f(n-1) + f(n-2)我的分析:最后迈一步有两种情况,看是迈1个台阶,还是迈2个台阶了

2021-06-24 21:34:26 320 1

原创 第6章—一切皆可搜索

6.1 算法解释深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。6.2 深度优先搜索主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。树是图的一种特例(连通无环的图就是树),接下来我们来看看树用深度优先遍历该怎么遍历。所以说深度优先遍历里面要用到栈,为什么呢

2021-06-11 16:42:53 118 1

原创 如何禁止访问者不通过登录页面而强行进入其他页面

1、首先把登陆后后的页面和非登陆的界面加以区分2、把登陆后的界面归入同一个文件夹下(这里指的是网页的URL地址)例如 工程地址是http://localhost/test/3、可以把登陆后的网页以及servlet全部归入http://localhost/test/checked/然后,用一个filter对checked下的所有访问进行过滤4、用一个sessionAttribute进行判断是否已经登录(属性名字,和有效值可以随意),这个sesstionAttribute应当在登录成功后被设置成有效值

2021-05-26 14:52:54 1588

原创 Nginx 正向代理 反向代理

Nginx四大作用:——反向代理——正向代理——负载均衡——动静分离(HTTP服务器)1.1 反向代理反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一

2021-05-12 09:17:29 145

原创 4—高并发秒杀API及高并发优化

4.1 可优化的地方分析红色部分是可以优化的部分1、详情页会给我们静态化放到CDN当中,每个公司CDN接口暴露都不同2、系统时间只是new了一个日期对象3、倒计时是在js端(浏览器)操作的,对服务器不会有影响4、地址暴露接口:所有秒杀单条件可以达成的时候,都要通过一个Restful请求来访问后端(这是一个高并发的点)5、执行秒杀操作:肯定也是高并发的地方4.2 redis优化地址暴露接口4.2.1 seckill.pom文件中导入依赖redis客户端:Jedis4.2.4在Seckil

2021-04-23 23:09:45 333

原创 名词解释

js:jsp:ajax:json:url:cdn:内容分发网络1、加速用户获取数据的系统2、部署在离用户最近的网络节点上3、命中CDN不需要访问后端服务器jsp:servlet:

2021-04-23 14:28:39 83

原创 详解java注解

第一章、概述第二章、java常用注解第三章、注解分类第四章、自定义注解第五章、项目实战第六章、课程总结第一章、概述第二章、java常用注解2.1 JDK自带注解@Override : 子类覆盖了父类的方法**@Deprecated :**方法已经过时了,不用了**@Suppvisewarnings :**虽然方法过时了,但你非要用,那就@Suppvisewarnings(“deprecation”)来让过时的方法继续使用2.2 常见的第三方注解@Autowired自动生成实例

2021-04-22 09:31:53 120

原创 2—service层

dao层只负责对远程数据库进行操作,而不进行逻辑编写这样就能互相影响减少,方便review1、秒杀业务接口设计先创建三个包service 负责业务实现exception 秒杀过程中出现的异常dto 与entity类似,但它关注web和业务之间的传递1.1 SeckillServicea、查询所有秒杀记录b、查询单个秒杀记录c、秒杀开启是输出秒杀接口地址,否则输出系统时间和秒杀时间d、执行秒杀操作1.2 dto下的Exposer.java(定义秒杀开始前的一些参数)定义md51.

2021-04-21 09:14:25 261

原创 1—dao层

1、sql写代码创建好数据库2、entity实体里面的就是数据库里面的对象2.1、Seckill秒杀数据库里面的对象2.2、SuccessKilled秒杀成功的对象3、dao层是面向数据库的接口3.1 SeckillDao接口a、 减库存b、 根据id查询秒杀对象c、 根据偏移量查询秒杀商品列表3.2 SuccessKilledDao接口a、 插入购买明细,可过滤重复b、 根据id查询成功秒杀的商品4、myBatis基于mapper自动实现dao接口(myBatis实现数据库中对象映

2021-04-20 21:15:43 209

原创 各种锁的机制

根据锁的特性来进行分类1、乐观锁和悲观锁悲观锁: 对于一个数据的并发操作,悲观锁认为自己在使用数据的时候一定会有别的线程来修改数据,因此就要先加锁,确保数据不会被其他线程修改。synchronized关键字和Lock的实现类都是悲观锁。乐观锁: 自己在使用数据的时候不会有其他线程来修改数据的,因此不会添加锁,只是在更新数据之前去判断这个数据是否被修改。如果已经被修改,那就根据不同的实现方式执行不同的操作(例如报错或者自动重试);如果没有被更新,那就将自己修改的数据成功写入。CAS算法就是使用无锁编程

2021-04-19 14:46:14 556

原创 第十二届蓝桥杯

题目描述:使用二维数组打印一个10行杨辉三角。第一行有 1个元素, 第 n行有 n个元素每一行的第一个元素和最后一个元素都是 1从第三行开始, 对于非第一个元素和最后一个元素的元素。即:yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];我的分析:1.声明并初始化二维数组2.给数组的元素赋值 2.1给首末元素赋值 2.2给每行的非首末元素赋值3.遍历二维数组代码:public class Main8 { public st

2021-04-18 21:52:05 712

原创 剑指offer——链表

题目代号: 剑指 Offer 06. 从尾到头打印链表题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。测试用例:输入:head = [1,3,2]输出:[2,3,1]我的分析:放在栈里面,真的是极好的,因为这样就相当于倒序了代码:public class offer6 { public static void main(String[] args) { } public int[] reversePrint(ListNode h

2021-04-17 17:00:07 70

原创 剑指offer—字符串

题目代号: 剑指 Offer 05. 替换空格题目描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。测试用例:示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”我的分析:虽然这是一个字符串,但我们是可以一个一个字母的拿出来,当遇到空格的时候就替换,否则就直接加上代码:package 剑指offer;import java.io.BufferedReader;import java.io.IOException;im

2021-04-14 19:41:57 119

原创 剑指offer—其他

题目代号: 剑指 Offer 15. 二进制中1的个数题目描述:请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。其中负数用补码表示。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。测试用例:示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00

2021-04-12 22:29:39 104

原创 剑指offer—数学

题目代号: 剑指 Offer 16. 数值的整数次方题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。测试用例:示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25我的分析:其实主要是指

2021-04-12 20:46:43 62

原创 剑指offer—栈和队列

题目代号: 剑指 Offer 09. 用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )测试用例:示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:

2021-04-12 16:22:15 55

原创 剑指offer—递归和循环

题目代号: 剑指 Offer 10- I. 斐波那契数列题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。测试用例:示例

2021-04-12 14:31:51 53

原创 剑指offer—回溯

回溯法的思想:在包含所有解的解空间树里面,我们从头开始来探索,当发现不满足结果的时候,就往回缩一步,还不满足就再缩,最终走通题目代号: 剑指 Offer 12. 矩阵中的路径题目描述:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4

2021-04-11 22:24:24 99

原创 剑指offer—数组

题目代号: 剑指 Offer 03. 数组中重复的数字题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。测试用例:输入:7[2, 3, 1, 0, 2, 5, 3]输出:2 或 3我的分析:给它一排序,然后顺序访问就好了代码package 剑指offer;import java.util.Arrays;impo

2021-04-08 23:00:49 107

原创 OJ系统的常见输入输出问题—BufferedReader

例题7:import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Arrays;// import java.util.*;// import java.io.*;public class Main{ public static void main(String[] args) throws Exception{ BufferedReader reader = n

2021-04-06 22:31:11 225

原创 OJ系统的常见输入输出问题Scanner

对于输入,主要用到Scanner的方法,记得导入包 import java.util.Scanner或者import java.util.* ;这是一个用于扫描输入文本的新的实用程序;Scanner 的两种方法:方法1:1、nextlnt():只读取int值,就是只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。nextFloat()、nextDouble()这些也是以此类推,只能读取符合该类型的数据2、next(相当于nextString)只读空格之前的数据,并且在输

2021-04-06 20:47:52 446

原创 JZ1

题目代号: 剑指offer1题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。测试用例:输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值true说明存在7,返回true我的分析:现在我们面对一个二维数组,而且有规律,咱们就一行一行的来操作,当遍历第一行的时候,如果碰到了某个数的值

2021-03-30 21:54:07 69

原创 nginx反向代理——负载均衡

1、概述nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;nginx可以作为一个HTTP服务器进行网站的发布处理;另外nginx可以作为反向代理进行负载均衡的实现。2、反向代理2.1 代理说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专

2021-03-28 20:39:02 149

原创 SpringBoot常用注解

1、@SpringBootApplication包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上,是Sprnig Boot项目的核心注解,目的是开启自动配置2、@RestController用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody3、@Service用于标注业务层组件。4、@Repository用于标注数据访问组件,即DAO组件。5、@Respo

2021-03-26 18:18:43 639

原创 JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。服务器返回给客户端的数据,一般都是JSON格式或者XML格式; JSON 比 XML 更小、更快,更易解析。XML格式<?xml version="1.0" encoding="utf-8"?><country> <name>中国</name> <province> <name>黑龙江&l

2021-03-23 19:47:31 55

原创 重载和重写的区别

区别:一、方法重写在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的

2021-03-22 11:03:15 246

原创 同步、异步、互斥、死锁

同步与异步的概念多线程开发可能遇到的问题:多个线程抢一个资源什么是同步:同步就是协同步调,按预定的先后次序进行运行。如:你说完,我再说。"同"字从字面上容易理解为一起动作其实不是,"同"字应是指协同、协助、互相配合。如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。在计算机领域,同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回

2021-03-22 10:34:18 374

原创 生产者和消费者模式

一、什么是生产者和消费者其实生产者与消费者模式就是一个多线程并发协作的模式,在这个模式中呢,一部分线程被用于去生产数据,另一部分线程去处理数据,于是便有了形象的生产者与消费者了。而为了更好的优化生产者与消费者的关系,便设立一个缓冲区,也就相当于一个数据仓库,当生产者生产数据时锁住仓库,不让消费者访问,当消费者消费时锁住仓库,不让生产者访问仓库。举一个简单的例子,有一个生产者生产包子,他将生产好的包子放到筐中,放完包子由消费者从筐中拿出包子使用。当然筐还有一个作用就是当筐中没有包子时便锁住筐,不让消费者去

2021-03-22 09:52:44 1267

原创 RabbitMQ-消息中间件

一、介绍什么是MQMQ(Message Queue)消息队列,通过典型的 生产者 和 消费者 模型,生产者向消息队列中生产信息,消费者不断地从队列中获取信息,它们是异步的。主流的MQ有RabbitMQ、ActiveMQ、kafka、阿里巴巴开发的RocketMQ等默认端口号:15672二、工作模式**第一种模型(直连)——直连模式**P:生产者,也就是要发送消息的程序C:消费者,消息的接受者,会一直等待消息到来queue:消息队列,图中红色部分,可以缓存消息,生产者向其投递消息,消费者

2021-03-21 22:30:43 67

原创 pojo层,Dao层,Mapper层,service层,controller层

MVC框架即模型-视图-控制器(model-View-controller)M即model模型是指模型表示业务规则V即View视图是指用户看到并与之交互的界面C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。DAO层:DAO层叫数据访问层,全称为data access object,某个DAO一定是和数据库的某一张表一一对应的,其中封装了CRUD(增加Create、检索Retrieve、更新Update和删除Delet.

2021-03-20 16:09:22 18905 6

空空如也

空空如也

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

TA关注的人

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