自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 寻找第K大 —— 快排思想 / 堆排思想

NC88 寻找第K大描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(1<=K<=n),请返回第K大的数(包括重复的元素,不用去重),保证答案存在。示例1输入:[1,3,5,2,2],5,3复制返回值:2复制示例2输入:[10,10,9,9,8,7,5,6,4,3,4,2],12,3复制返回值:9复制说明:去重后的第3大是8,但本题要求包含重复的元素,不用去重,所以输出9题目链接:htt

2021-08-06 16:20:00 397

原创 测试管理及项目测试流程

基于需求测试目标:量化指标;性能测试;需求分析测试范围:测试工具:兼容性测试:app,主流机型;性能测试-jmeter,loadrunner;接口测试:postman soupUI 写脚本测试资源:人力资源;物力资源测试计划:时间测试策略:有限的时间,有限的资源要达到一个平衡,最终软件质量和测试所产生的风险之间的平衡。需求分析:功能性需求:登录、注册、查询。。。非功能性需求:在功能性需求上增加一些限制,易用性,兼容性,可靠性,可移植性,安全性,性能例如:登录:在高峰期,用户平均成功登录的

2021-07-20 17:13:02 5002 2

原创 软件测试设计——按类型划分

按照开发阶段划分测试金字塔模型从下到上三层,投入相同的时间,人力资源等,回报率(产出)越来越低从下到上,测试效率越来越低从下到上,定位问题越来越难单元测试测试阶段:编码前(TDD),编码后 (Test-Driven-Develop 测试驱动开发)测试内容:单元接口测试(按照接口设计文档,参数,输出),局部数据结构测试(局部变量),边界测试,路径测试,错误处理单元测试框架:Junit在pom文件加载依赖在 file-settings-Plugins 搜索Junit开始做单元测试

2021-07-17 19:23:58 468

原创 复习多线程相关知识

进程 vs 线程1.进程是资源分配的最小单位,线程是系统调度的最小单位2.一个进程中至少包含一个线程,线程是依附线程存在的,而进程的实际执行单位是线程3.进程之间不能共享资源,而线程之间可以共享资源单例模式将构造函数设置成私有创建一个私有的对象创建一个公共提供单例对象的方法DCL双重效验锁volatile,为什么要加volatile?锁策略乐观锁-》cas-》aba》版本号JUC:ReentrantLock信号量 -》实现限流计数器循环屏障jvm内存布局内存模型

2021-07-08 12:25:49 255 2

原创 超详解 JVM 中重点内容,对整个底层体系更进认知

JVM 组成 5 个部分类加载机制(JVM 加载)、双亲委派模型、破坏双亲委派模型的3个场景垃圾回收a)判断什么是垃圾?b)垃圾算法c)垃圾处理器(7种 -》 CMS/G1)JMM(让 JVM 高速运行的一种技术)java能够一次编写,到处运行的关键(JVM兼容处理)第一: HotSpot JVM第二: IBM J9 JVMJVM 布局(HotSpot)JDK 1.81. 堆new Object() 所有对象都是存在此区域,此区域也是 JVM 中最大的一块区域JVM 的垃圾回收

2021-07-05 21:08:07 256 3

原创 思维导图模式 -- 深度理解及复习 网络 知识

网络应用层:将标准的数据格式转换成程序需要的格式表示层:将设备的数据格式转换成标准的格式会话层:用来关闭通讯双方之间的会话传输层:保证通讯双方的数据能够正常传输网络层:地址的管理和路由选择数据链路层:确保两个相邻节点间的数据传递物理层:将数字信号转换成光电信号TCP / IP应用层:HTTP(80)、FTP(21)、SSH(22)、TELENT(23)、DNS(53)传输层:TCP、UDP网络层数据链路层数据传输的 5 个要素:1.源地址 IP2.源地址端口号3.目的地 IP

2021-07-03 10:27:09 643 1

原创 思维导图模式 -- 深度理解及复习 JavaWeb 知识

tomcat:1.bin:启动和停止【注意启动和停止的流程】2.logs:查看日志3.webapps:war请求端:request1.首行(方法类型,URL,版本号)2.header3.空行4.body(get 请求时 body 为空)相应端:response1.首行(版本号,状态码,状态码描述信息)2.header3.空行4.bodyMaven:构建和打包 Java 项目工具1.管理所有外部引用,放在pom.xml2.用package打包项目3.放到本地仓库中Goog

2021-07-01 21:13:15 276 3

原创 思维导图模式 -- 深度理解及复习 数据库 知识

1.MySQL 使用2.索引(MySQL 高效最主要的手段)3.事务(MySQL 稳定的使用)4.其他:MySQL 执行引擎 / MySQL 日志InnoDB:默认引擎,稳定,支持事务MyIsam:不支持事务,快,不稳定MySQL 使用数据库操作查询所有数据:show databases;删除数据库:drop database db_name;使用数据库:use db_name;创建数据库:create database db_bame character set utf8mb4;表

2021-07-01 14:56:18 381

原创 初识Spring Framework——Bean、注册Bean、依赖注入

目录简述Spring容器注册Bean的三种方式方式一:类注解方式二:@Bean方式三:@Configuration对象注入的三种方式(从spring获取对象)方式一:@Autowired 属性注入方式二:通过 Set 的方式注入方式三:构造方法注入Spring 各层之间联系BeanBean 的作用域(Bean的类型)单例 (singleton)创建新对象 (prototype)requestsessionapplicationwebsocketBean 的生命周期简述Spring容器传统方式: new对

2021-06-21 13:50:13 900

原创 初识Spring(IOC,DI,创建流程)

IOC(Inversion of Control,控制反转) ,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。使用 IOC 之前,我们需要自己 new 对象,相当于对象的创建权和销毁权在我们手中,而使用 IOC 之后,相当于将控制权交给第三方(Spring容器)进行管理。DIDI (Dependency Injection,依赖注入) 是实现IoC的方法之一。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。总结: IOC 控制反转是一种程序.

2021-06-20 21:46:07 235

原创 举例详解 java.util.concurrent 并发包 4 种常见类

JUC:常用类1. ReentrantLock(1)lock 写在 try 之前(2)一定要记得在 finally 里面进行 unlock()2. 信号量用来控制锁的数量acquire() 尝试获取锁,如果可以正常获取到,则执行后面的业务逻辑,如果获取失败,则阻塞等待release() 释放锁3. 计数器 CountDownLatch计数器是用来保证一组线程同时完成某个await() :等待,当线程数量不满足 CountDownLatch 的数量的时候,执行此代码会阻塞等待,直到数量满足

2021-06-03 14:18:02 1510 6

原创 求正数数组的最小不可组成和 --- 背包问题(动态规划)

目录求正数数组的最小不可组成和题目解题思路代码实现求正数数组的最小不可组成和题目给定一个全是正数的数组arr,定义一下arr的最小不可组成和的概念: 1,arr的所有非空子集中,把每个子集内的所有元素加起来会出现很多的值,其中最小的记为min,最大的记为max; 2,在区间[min,max]上,如果有一些正数不可以被arr某一个子集相加得到,那么这些正数中最小的那个,就是arr的最小不可组成和; 3,在区间[min,max]上,如果所有的数都可以被arr的某一个子集相加得到,那么max+1是arr的

2021-06-02 20:48:00 274

原创 每日一题 错选择 及 编程题 周总结(五)

链接:https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387来源:牛客网1)这里的f(n) 代表的是n个台阶有一次1,2,…n阶的 跳法数。2)n = 1时,只有1种跳法,f(1) = 1n = 2时,会有两个跳得方式,一次1阶或者2阶,这回归到了问题(1) ,f(2) = f(2-1) + f(2-2)n = 3时,会有三种跳得方式,1阶、2阶、3阶,那么就是第一次跳出1阶后面剩下:f(3-1

2021-06-02 20:37:05 1248

原创 Web在线聊天室(完结) --- 注册用户+ip地址

注册用户接口设计请求:POST /register{ name: xxx, password: xxx, nickName: "蔡徐坤", signature: "我擅长唱跳rap篮球",}响应:HTTP/1.1 200 OK{ ok: 1, reason: xxx}前端异步回调ajax函数 register(){ $.ajax({ url: 'register', type: 'post'

2021-05-31 18:05:32 3902 30

原创 带你深入理解多线程 --- 锁策略篇

ThreadLocal 缺点 :不可继承行(子线程不能读取父线程的变量)脏数据(ThreadPool【复用】线程的复用会复用线程相关的静态变量)内存溢出【原因】ThreadPool(长生命周期) -》 Thread -》 ThreadLocal -》 Map -》 Entry -》 key,value(强引用)单例模式:饿汉方式(线程安全)懒汉方式(线程安全)DCL 双重效验锁阻塞式队列:生产者在队列满的情况下就会休眠消费者在队列为空的时候进行休眠乐观锁【策略】:它认为一

2021-05-30 00:16:49 353

原创 Web在线聊天室(12) --- 收发消息(单例模式+阻塞式队列)

websocket的理解基于代码理解客户端和服务端建立连接,就产生一个新的webSocket对象,所以不存在线程安全问题(Servlet是一个实例对象,多线程操作一个对象存在线程安全问题)理论上的实现异步,事件驱动,io模型的理论原理从网卡拿到数据,然后系统决定数据怎么交给进程,都是io的操作,由io的模型来决定如何交付数据websocket的实现,是基于事件驱动,异步的方式(原理叫作io多路复用)注册一个事件后,java进程(web项目不用一直阻塞等待io数据返回)【程序该做啥就做啥,系

2021-05-29 21:32:08 1135 2

原创 Web在线聊天室(11) --- 登陆后显示历史消息

目录登陆后显示历史消息服务器端onOpen方法查询上次登录后的所有消息websocket服务器端关闭连接操作实现效果登陆后显示历史消息服务器端onOpen方法 @OnOpen public void onOpen(@PathParam("userId") Integer userId, Session session) throws IOException { // 1.把每个客户端的session都保存起来,之后转发消息到所有客户端要用 MessageC

2021-05-28 23:32:17 1376 1

原创 Web在线聊天室(10) --- 插入消息

插入消息消息格式{ "userId": 1, "nickName": "蔡徐坤", "channelId": 1, "content": "这是消息正文"}服务器端onMessage方法 @OnMessage public void onMessage(Session session, String message) { // 1.遍历保存的所有session,每个都发送消息 MessageCenter.sendMessage(message

2021-05-28 23:29:42 213

原创 Web在线聊天室(9) --- 退出登录

退出登录删除客户端中保存的session接口设计请求:GET /logout响应:HTTP/1.1 200 OK{ ok: 1, reason: xxx}前端ajax异步回调函数 logout() { console.log("logout"); app.login.isLogin = false; app.user.name = null; $.ajax({ ur

2021-05-28 23:22:27 382

原创 Web在线聊天室(8) --- 服务器中换收发消息

目录搭建服务器框架客户端服务器端实现效果收发消息消息传输数据格式编写messageCenter保存websocket需要的信息服务器端调用该类实现效果搭建服务器框架客户端 sendMessage() { let message = { userId: this.user.userId, nickName: this.user.nickName, channelId: this.curChannel

2021-05-27 18:04:59 239

原创 Web在线聊天室(7) --- 查询频道列表

查询频道列表接口接口设计文档请求:GET /channel响应:HTTP/1.1 200 OK[ ok:true reason:xxx data{ channelId: 1, channelName: xxx }]编写前端ajax回调函数 getChannels() { $.ajax({ type: "get", url: "channel", success: functi

2021-05-27 18:02:47 226 1

原创 多线程案例 --- 单例模式(饿汉、懒汉)、阻塞式队列

ThreadLocal 使用:set:将私有变量设置到线程get:从线程终获取ThreadLocalremove:将线程的ThreadLocal移除initialValue:初始化withInitialValue:初始化ThreadLocal 使用场景:线程安全问题线程级别的数据传递ThreadLocal 缺点:不能实现父子线程之间的数据传递脏数据 - > ThreadLocal + 线程池(复用)内存溢出分析内存溢出线程池是长生命周期,而线程是执行完成任务线程

2021-05-26 20:36:03 241

原创 测试用例就得这么设计

测试用例的基本要素向测试系统发起的一组集合,测试平台,测试数据,测试步骤,预期结果等。(测试方式,标题,重要性,优先级,功能模块等)测试用例的设计方法基于需求的设计根据需求去设计测试用例验证需求的正确性;分析需求,细化需求,从需求中提炼功能模块,划分子功能,根据每一个子功能去写测试用例用户需求测试题目:购买3000块钱以内的华为只能手机价格:3000以内(小于等于),测试3000,2999,3001手机类型:智能手机品牌:华为手机基本功能测试:打电话,发短信,APP的安装使用,连网

2021-05-25 17:43:24 344

原创 斐波那契凤尾 --- 遇到的坑

斐波那契凤尾斐波那契凤尾坑1解决坑1坑2解决坑2完整代码斐波那契凤尾NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。输入描述:输入有多组数据。每组数据一行,包含一个整数n (1≤n≤100000)。输出描述:对应每一组输入,输出第n个斐波那契数的最后6位。示例1输入1234100000输出1235537501

2021-05-25 16:37:18 271

原创 Web在线聊天室(6) --- login登录接口

目录登录接口接口设计文档编写servlet实现dopost方法编写操作数据库方法实现结果检测登录接口接口设计文档编写servlet实现doget方法实现效果登录接口接口设计文档请求:POST /login{ name: xxx, password: xxx}响应:HTTP/1.1 200 OK{ ok: true, reason: xxx, userId: xxx, name: xxx, nickName: xxx, signature: xxx}编写servlet

2021-05-22 21:45:25 1067 1

原创 Web在线聊天室(5) --- 异常类+工具类+实体类

通用工具类代码

2021-05-22 18:25:26 240 1

原创 因子个数 --- 递归法 / 遍历法

因子个数一个正整数可以分解成一个或多个数组的积。例如36=223*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。输入描述:输入包括多组数据。每组数据仅有一个整数n (2≤n≤100000)。输出描述:对应每个整数,输出其因子个数,每个结果占一行。示例1输入302620输出322链接:https://www.nowcoder.com/questionTerminal/e8fb8f89f5d14

2021-05-22 15:01:00 563

原创 Web在线聊天室(4) --- 详细设计

业务背景:张三要发送消息给李四实现:(1)客户端点到点发送消息(2)服务端转发消息(我们采取这种方式)流程:张三发送消息给服务端服务端发送消息给李四这种是基于http协议的与服务端建立连接相互请求和响应我们会采取这种方式来实现消息发送。这种方式用http去实现是不行的(1)因为http是短连接,无状态的,一次请求完了服务器一次响应后就会断开连接。(2)服务器端的 ip 是开放在公网的,所有人能访问;而客户端的 ip 是不开放的(服务端不知道),所以服务器端不能主动给客户端发送消

2021-05-21 20:33:03 1697

原创 每日一题 错选择 及 编程题 周总结(四)

目录Week4Day1错选择汽水瓶查找两个字符串a,b中的最长公共子串Day2错选择字符串反转公共字串计算Day3错选择洗牌MP3光标位置Day5错选择微信红包计算字符串的距离Day6错选择年终奖迷宫问题Week4Day1错选择用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()A 仅修改队头指针B 仅修改队尾指针C 队头、队尾指针都可能要修改D 队头、队尾指针都要修改正确答案:C平常如果队列有很多元素的时候,只需要改变队头的指针即可,但

2021-05-20 18:57:51 472

原创 计算字符串的距离 --- 动态规划

计算字符串的距离计算字符串的距离解题思路代码实现计算字符串的距离【计算字符串的距离】Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。Ex:字符串A:abcdefg字符串B: abcdef通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操

2021-05-20 18:54:43 875

原创 Web在线聊天室(3) --- WebSocket练手Demo

WebSocket练手流程服务器代码package org.example.test;import javax.websocket.*;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import java.io.IOException;@ServerEndpoint(value="/test/{userId}")public class TestWebSocket

2021-05-18 21:39:28 415 5

原创 Web在线聊天室(2) --- 技术实现原理

技术实现原理实现技术原理(一)Session(二)Ajax 技术(三)消息推送轮询方式长轮询长连接webSocket此项目中的webSocket实现技术原理(一)Session同一个浏览器,即便有多个标签页,也是保存相同的sessionsession生命周期:(1)登录系统没有注销(2)没有超时原理:session基于cookie实现的作用:解决未登录敏感资源的访问问题(更安全)代码:[登陆时:账号密码验证通过后 request.getSession(); //默认是true ][登录

2021-05-18 21:37:03 2420 5

原创 Web在线聊天室(1) --- 需求分析及准备工作

这里写目录标题软件的生命周期业务:在线聊天室项目背景需求分析(一)注册用户(二)登录账号(三)频道中收发消息(四)新登录用户收到消息开发web项目的流程前提准备(一)配置servlet项目(二)idea 中配置 tomcat(三)配置pom文件软件的生命周期业务人员提需求产品经理产出产品(线框图,原型图)系统设计(概设,详设)开发测试部署所以我们先解决我们的需求业务:在线聊天室项目背景消息推送实现方案需求分析(一)注册用户先可以点击注册按钮来注册新的用户(二)登录账号登

2021-05-18 21:29:19 2398 12

原创 迷宫问题 --- 回溯法

迷宫问题定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一空格是可以走的路。本题含有多组数据。

2021-05-15 20:20:21 422

原创 对比分析线程休眠三种方式

线程休眠sleepsleep线程休眠方式休眠当前线程wait线程通讯机制wait举例wait方法面试问题wait 为什么要加锁?wait 为什么要释放锁?Thread.sleep(0) 和 Object.lock(0) 区别wait 和 sleep 的区别为什么 wait 会放到 Object 中而不是 Thread 中?LockSupport不传参传参wait 和 LockSupport 的区别sleepsleep线程休眠方式sleep线程休眠一共有 3 种方式:方式一:Thread.sleep

2021-05-13 17:33:02 1832

原创 死锁的概念以及处理方式

线程和锁的关系(一对多)一个线程可以拥有多把锁一把锁只能被一个线程锁拥有死锁造成的四个条件(同时满足)互斥条件(一个资源只能被一个线程持有,当被一个线程持有之后就不能被其他线程持有)请求拥有条件(一个线程持有了一个资源之后,又试图请求另一个资源)不可剥夺条件(一个资源被一个线程拥有之后,如果这个线程不释放此资源,那么其他线程不能强制获得此资源)环路等待条件(多个线程在获取资源时,形成了一个环形链条)如何解决死锁从以下两个条件如手,修改以下条件任意一个:请求拥有条件环路等待条件

2021-05-13 17:22:21 361

原创 排查死锁的三款工具流程介绍

排查死锁方法一:jconsole 工具方法二:jvisualvm 工具方法三:jmc 工具我首先写了一个死锁的代码,文件名叫ThreadDemo36方法一:jconsole 工具1.我们在 JDK 的 bin 目录下找到 jconsole.exe 文件,点击启动 jconsole2.选择我们本地进程的 ThreadDemo36 死锁代码,点击连接,并选择不安全的连接3.选择线程,点击检测死锁4.我们此时就可以看到出现死锁的两个线程,并且看到死锁的详细信息,拥有者,死锁的类,死锁的具体位置

2021-05-13 11:46:46 556 2

原创 每日一题 错选择 及 编程题 周总结(三)

第1天第二题跳石板 第2天第二题幸运的袋子

2021-05-12 18:46:19 381 2

原创 字符串通配符 --- 回溯法

字符串通配符问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。要求:实现如下2个通配符::匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)?:匹配1个字符输入:通配符表达式;一组字符串。输出:返回匹配的结果,正确输出true,错误输出false本题含有多组样例输入!输入描述:先输入一个带有通配符的字符串,再输入一个需要匹配的字符串输出描述:返回匹配的结果,正确输出true,错误输

2021-05-12 18:18:43 217

原创 幸运的袋子 --- 回溯法

一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。输入描述:第一行输入一个正整数n(n ≤ 1000)第二行为n个数正整数.

2021-05-12 17:35:32 658

空空如也

空空如也

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

TA关注的人

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