- 博客(38)
- 收藏
- 关注
原创 贝壳测开8.22一面凉经
先开始写了三道sql题,基于一张表的查询,就是题目比较绕;接下来是算法题了,买股票(动态规划);然后开始问问题了1.测试用例的设计方法黑盒测试设计测试用例:等价类,边界值,因果图,正交法,场景设计法,错误猜测法白盒测试设计测试用例:语句覆盖,循环覆盖,路径覆盖,逻辑覆盖,条件覆盖,判定覆盖,条件组合覆盖,判定组合覆盖2.常用的数据结构顺序表,链表,栈,队列,二叉树,hashset,hashmap3.哈希冲突是什么,hashmap存储方式哈希冲突:不同关键字通过相同哈希函数计算出相同的哈希地
2021-08-23 10:11:48
224
原创 基于Java Servlet图片服务器
目录项目简介项目功能项目页面展示数据库设计接口设计新增图片查看所有图片元信息、查看指定图片元信息查看图片内容扩展功能:基于白名单方式的防盗链(简单方法)删除图片接口项目简介解决GitHub、博客中插入图片的问题;给定一个url,能够获得图片内容项目功能一个HTTP服务器,提供对图片的增删改查功能,同时能够完成上传图片,展示图片。项目页面展示选择图片界面展示图片界面删除图片界面查看图片内容界面数据库设计设计一张图片表MySQL脚本drop table if exists `i
2021-07-23 14:32:39
501
1
原创 基于JavaWeb的简单博客系统
项目简介项目大体是上博客系统,我们外化成了用来发布就业招聘信息的学校论坛。项目实现的功能如下:1.用户注册2.用户登录3.我的文章列表3.添加我的文章4.修改我的文章5.删除我的文章6.所有人文章列表7.查看文章详情内容8.文章访问量统计9.文章点赞功能项目技术介绍前端:html写简单网页功能,css美化网页,JavaScript实现页面的动态效果和接口的调用后端:Servelt,java数据库:mysql项目管理工具:maven项目部署工具:tomcat、服务器项目页面
2021-07-21 09:47:25
1839
1
原创 JVM垃圾回收!!!
JVM垃圾回收器:判断死亡对象–>垃圾回收算法–>垃圾回收器一、判断一个对象的死亡1.引用计数器法给每个对象生成一个对应的计数器,每次在进行引用的时候这个计数器+1,如果撤销引用时计数器-1,GC会根据计数器的值,当此值等于0的时候就可以判定此对象为死亡对象。引用计数器缺点:不能解决循环引用的问题。...
2021-05-30 15:36:43
109
原创 JVM组成及类加载过程
一.JVMjava可以实现一次编写,到处运行。–>JVM帮我们处理不同硬件之间的差异参数设置:-X:执行的非标准的JVM参数,只有在部分HotSpot虚拟机下才能使用。-XX:标准的JVM参数,可以使用于所有的HotSpot虚拟机。-D:设置应用程序的参数二.JVM组成1.堆(线程共享)(1)堆:所有创建的对象信息都放在了这个区域,堆也是JVM中最大的一块内存。Java堆是所有线程共享的一块区域,在JVM启动时创建。此内存区域存放的都是对象实例。JVM规范中说到:“所有的对象实例以及
2021-05-30 11:14:36
204
原创 HashMap不安全!!!详细分析及解决方案
HashMap:非安全容器(实现结构、安全性问题)多线程下的问题:JDK1.7头插法–>死循环JDK1.8尾插法–>数据覆盖1.JDK1.7死循环(非常重要!!!)死循环出现在HashMap扩容时,负载因子:0.75(HashMap性能最高),HashMap默认大小为16,当容量大于等于0.75*16时进行扩容,默认2倍扩容源码分析:HashMap–>put()–>resize()–>transfer()【转移:将数组的值转移到新扩容的数组里;for循环的是数组,
2021-05-30 10:22:08
1059
原创 JUC是什么??
1.JUC :java.util.concurrentJUC包下的所有类都是线程安全的,JUC下有:1.ReentrantLock2.Semaphore(信号量),有限流功能3.CyclicBarrier(循环屏障)4.CountDownLatch(计数器)
2021-05-30 08:56:52
909
1
原创 牛客--拆分词句
描述给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“nowcode”;dict=[“now”, “code”].返回true,因为"nowcode"可以被分割成"now code".https://www.nowcoder.com/practice/5f3b7bf611764c8ba7868f3ed40d6b2c?tpId=46&tqId=29041&tPage
2021-05-28 16:22:36
110
原创 锁策略!!!
一.乐观锁 & 悲观锁1.乐观锁:它认为一般情况下不会出现问题,所以它在使用的时候不会加锁,只有在数据修改的时候,才会判断有没有锁竞争,如果没有就直接修改数据,如果有则会返回失败信息给用户自行处理。2.乐观锁的经典事项:CAS(Compare And Swap)对比并且替换CAS实现:(V【内存中的值】,A【预期的旧值】,B【新值】)V==A?true:V–>B ;false:不能修改在java中,对比失败不能修改后,会加入一个自旋锁,将内存中的值刷新3.面试题:CAS实现的原理?
2021-05-27 20:57:15
133
原创 单例模式详解
一.单例模式全局唯一并且所有程序都可以使用的对象,就是单例模式二.单例模式的两种实现方式:1.饿汉方式(线程安全的)2.懒汉方式写单例模式(不允许new)三个步骤:1.将构造函数设置为私有的2.创建一个静态的类变量(让第三步的方法返回的)3.给外部提供获取单例的方法饿汉方式:优点:实现简单、不存在线程安全问题,因为饿汉的方式是随着程序的启动而初始化的,因为类加载是线程安全的,所以他是线程安全的缺点:随着程序的启动而启动,有可能在整个程序的运行周期里面都没有用到,这样就带来了不必要的开销
2021-05-24 19:48:30
280
3
原创 ThreadLocal结构,优缺点,冲突解决
一.ThreadLocal的初始化方法在什么情况下不会执行?当ThreadLocal中出现set方法之后,所有类型的初始化方法就不会执行了原因:ThreadLocal在执行get方法的时候,才会判断并调用初始化方法public class ThreadLocalDemo4 { //创建并初始化ThreadLocal private static ThreadLocal<String> threadLocal= ThreadLocal.withInit
2021-05-24 19:30:05
2454
原创 ThreadLocal的方法及使用
一.解决线程安全问题1.线程安全的解决方案:加锁(synchronized,Lock),使用私有变量2.加锁可以解决线程安全的问题,但因为要同时进行排队处理,所以会带来一定的性能消耗3.有没有一种方案既可以避免加锁排队执行,又不会每次执行任务都需要重新创建私有变量?使用ThreadLocal线程的本地变量,每个线程创建一个私有变量(以1000个任务10个线程池的示例来说,使用ThreadLocal就是创建10个私有变量选择ThreadLocal还是锁?就看创建实例对象之后的复用率,复用率高就是
2021-05-23 09:36:11
2842
原创 线程池的终止、状态、执行
一.线程池终止threadPoolExecutor.shutdown(); 结束线程池public static void main(String[] args) throws InterruptedException { ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 5, 60, TimeUnit.SECONDS, new Linke
2021-05-21 17:50:12
829
原创 ThreadPoolExecutor执行流程
ThreadPoolExecutor执行流程:核心线程数、最大线程数、任务队列1.当任务量小于核心线程数的时候,它会创建一个线程来执行此任务2.当任务量大于核心线程数,并且没有空闲线程的时候,且线程池的线程数小于最大线程数,此时会将任务存到任务队列里面。注意:因为把多出来的任务存储在任务队列的成本最小,所以此时线程池会将新任务存在任务队列当中,而非新创建线程来执行任务。3.当前任务量比较大的时候,此时没有空闲的线程,并且任务队列已经满了,此时会判断当前线程池的任务数量是否大于等于最大线程数。如果当
2021-05-21 16:37:15
731
原创 线程池的五种拒绝策略
java提供的四种1.ThreadPoolExecutor.AbortPolicy()默认拒绝策略,不执行任务抛出异常ThreadPoolExecutor threadPoolExecutor= new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1), threadF
2021-05-21 09:38:20
519
原创 线程池
一.为什么需要线程池?(线程的缺点)1.线程的创建会开辟本地方法栈、虚拟机栈、程序计数器成为线程私有的内存,同时消耗的时候需要销毁以上三个区域,因此频繁的创建和消耗比较消耗系统资源。2.在任务量远远大于线程可以处理的任务量的时候,并不能友好的拒绝任务。二.线程池1.线程池是使用池化技术来管理线程和使用线程的方式。2.线程池的优点:可以避免频繁的创建和消耗线程可以更好地管理线程的个数和资源的个数拥有更多的功能,比如线程池可以进行定时任务的执行线程池可以更优化的拒绝不能处理的任务三.线程
2021-05-19 17:08:38
111
原创 手套问题
链接:https://www.nowcoder.com/questionTerminal/365d5722fff640a0b6684391153e58d8来源:牛客网在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n
2021-05-10 21:06:48
222
原创 z字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);示例 1:输入:s = “PAY
2021-05-09 15:25:14
259
原创 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring解题思路:1.如果字符串长度为1,那么一定
2021-05-09 09:39:35
159
原创 线程安全问题及如何解决!!!
线程安全问题1.线程不安全:是指使用多线程执行任务时,得到的结果与预期不相符。private static int count=0; public static void main(String[] args) { Thread t1=new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <1000
2021-05-04 18:17:28
199
原创 线程状态
1.线程的状态是一个枚举类型Thread.Statepublic static void main(String[] args) { for(Thread.State state:Thread.State.values()){ System.out.println(state); } }NEW:创建了线程但是还没有开始工作RUNNABLE:运行;分为RUNNING(运行中,即被服务的)和READY(就绪,即排队等待的)BLOCKED
2021-05-04 10:59:58
98
原创 认识线程及简单操作线程
一.进程与线程的区别进程是系统分配资源的最小单位,线程是系统调度的最小单位。一个进程中可以包含多个线程进程的实际执行单位就是线程一个进程里面至少包含一个线程(即主线程),而线程必须依托于进程存在进程不可以共享资源,而线程可以共享资源二.线程的休眠方式Thread.sleep(100); //休眠100毫秒TimeUnit.SECONDS.sleep(1);//休眠1秒TimeUnit.HOURS.sleep(1);//休眠1小时 Thread.sleep(TimeUnit.SEC
2021-05-04 10:31:37
131
原创 二叉树的下一结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。两种方法方法一:还原为二叉树求解因为题中定义的结点还包含其父亲结点的指针,那么我们很容易就可以找到根结点。然后保存中序遍历,再找出给定结点的下一结点。代码如下:import java.util.*;public class Solution {//因为中序遍历使用了递归//所以要在类内,方法外定义一个list保存中序遍历的结点 ArrayList<
2021-04-22 15:22:13
94
原创 牛客之连续最大和
一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。示例1输入3-1 2 1输出3解题思路:动态规划设dp[i]为第 i 个数与前面最大和数dp[i-1]之和的最大数,那么若 dp[i] + dp[i-1]
2021-04-22 10:14:37
180
原创 字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。后台会用以下方式调用Insert 和 FirstAppearingOnce 函数返回值描述:如果当前字符流没有存在出现一次的字符,返回#字符。解题思路:题中的“不重复” “第一次”都是关键词,字符串不重复问题很容易想到用哈希,但是由于哈希存放的顺序是根据hashcode,并不是自
2021-04-21 19:50:23
118
2
原创 牛客之末尾为0的个数
输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2输入描述:输入为一行,n(1 ≤ n ≤ 1000)输出描述:输出一个整数,即题目所求示例1输入10输出2解题思路:首先要想到末尾为0其实就是偶数5的结果,再细说就是25的结果,当然在阶乘中2的个数远大于5,所以我们只需要知道在阶乘计算过程中有多少个5。输入一个正整数n,即知道了从n到1这每个数里面含有多少个5,再相加就可以得知整个过程中有多少个5.代码如下:publi
2021-04-21 17:14:33
146
转载 牛客之排序子序列
牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。输出描述:输出一个
2021-04-21 10:48:58
101
原创 剑指offer 53 表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。示例1输入“123.45e+6”返回值true示例2输入“1.2.3”返回值false解题思路:关于小数点,不能放在第一位或者最后一位,也只能放在e的前面,且只能有一个关于e,不能放在第一位或者最后一位,且只能有一个关于±,如果有
2021-04-19 15:28:26
79
原创 TCP三次握手,四次挥手
TCP三次握手建立连接TCP的特性就是面向连接有连接必须要证明四项(因为TCP的发送端和接收端都是全双工)发送端的发送能力发送端的接收能力接收端的发送能力接收端的接收能力三次握手过程图:面试题1.TCP两次握手行不行?不行,两次握手不能完全验证发送端和接收端的发送和接收能力。2.TCP四次握手行不行?可以,但是没有必要3.accept过程发生在什么时候?发生在三次握手之后,三次握手完成之后,客户端与服务器端就建立了tcp连接并可以进行数据交互,这时就可以调用accpet函数
2021-04-18 11:58:57
118
原创 OSI七层模型 TCP/IP五层(四层)模型
OSI七层模型OSI七层网络模型称为开放式系统互连参考模型,把网络从逻辑上分为了7层,每一层都有相关,相对应的物理设备,比如路由器,交换机;通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。7.应用层针对特定的应用、程序的协议6.表示层将网络信息包转化为程序需要的数据格式,或者说将设备固有的数据格式转化为网络标准数据格式5.会话层负责建立和断开通信连接,管理传输层以下的分层4.传输层确认源地址和目标地址,保证数据可靠的从源主机发送到目标主机网络交互必备的5个部分
2021-04-18 10:22:54
340
1
原创 将字符串转化为整数
实现函数 atoi 。函数的功能为将字符串转化为整数提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。示例1输入“123”输出123首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字
2021-04-18 09:02:19
234
原创 牛客 不要二
二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)输出描述:输出一个最多可以放的蛋糕数示例1输入3 2输出
2021-04-18 08:26:13
194
原创 部署Web项目到Linux环境
打开Xshell获取连接第一步 配置JDK1.yum list java*2.yum -y install java-1.8.0-openjdk*3.java -version第二步 配置tomcat1.在tomcat官网下载安装包2.通过xftp将tomcat安装包上传到服务器3.解压tomcat的安装包切记进入安装包所在文件夹目录,再执行指令tar -zxvf apache-tomcat-8.5.65.tar.gz4.启动tomcat进入bin目录下,再执行指令
2021-04-13 22:01:39
225
3
原创 剑指offer40 数组中只出出现一次的数字
题目描述一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。示例1输入[1,4,1,6]返回值[4,6]三种方法1.最简单的肯定是用哈希表解决,直接遍历public int[] FindNumsAppearOnce (int[] array) { HashMap<Integer,Integer> map=new HashMap<>(); for(int x:array){
2021-04-11 10:40:46
84
原创 HTTP
1.HTTP 协议相关知识<1>http是超文本传输协议,https是基于http实现的http是明文传输,https是加密传输<2>URL(网址)协议(http/https)://服务器地址(ip,域名):端口号/目录地址/页面地址?参数#片段标识符●HTTP协议,默认端口号80;HTTPS协议,默认端口号443;默认端口号可省略2.HTTP协议格式<1>请求格式首行信息:方法类型(GET,POST),URL,版本号请求头header:每个键值对格
2021-03-28 10:02:35
127
1
原创 JavaScript基本知识
1.JavaScript能够实现页面的动态效果和接口的调用2.JavaScript的代码由两类构成<1>基础的逻辑业务代码(if,else,for…)<2>操作控件的代码(取控件的值,设置控件的值)3.js两种写法<1>原生js<script> function myck(type) { var num1=document.getElementById("num1"); var num2=
2021-03-27 21:27:00
94
原创 html ,css基本知识
[html 基本知识css 基本知识javascript 基本知识HTTP 协议相关知识请求格式响应格式常见请求方法及含义常见响应状态及含义常见HTTP头静态资源 vs 动态资源什么是 JSP 技术(模板技术)Servlet 的生命周期TOC](这里写自定义## 标题提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生
2021-03-27 20:44:01
172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人