自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手动解决基于Maven相关项目的资源过滤问题

代码片段如下:<!--手动解决maven资源过滤问题--> <build> <resources> <resource> <directory>src/main/resource</directory> <includes> <include>**/*.xml&

2021-12-23 16:10:36 459

原创 mybatis log4j日志配置文件(log4j.properties)

log4j.properties#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面代码log4j.rootLogger=DEBUG,console,file# 输出控制台的相关设置log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.Threshold=DE

2021-11-12 21:33:09 317

原创 IDEA创建Servlet项目

1.选择Maven中模板webapp模板创建一路Next(如下图选中两个Override)3.目录介绍如下4.手动创建Java源代码根路径选择Java(注意蓝色背景的)创建Java源代码根路径完成5.手动添加Servlet引用打开Maven中央仓库地址搜索Seervlet选择Servlet3.1.0这个版本将其复制添加到配置文件中添加完成后点击刷新下载6.修改配置文件 web.xml打开web.xml删除原始内容重新添加如下代码添加代码块<?xml ver

2021-10-16 15:33:20 179

原创 如何使用Maven创建Spring项目(IDEA)???

如何用Maven创建Spring项目?为什么要用这种已经“out”方式去创建?具体流程为什么要用这种已经“out”方式去创建?虽然在实际开发中不会以这种方式去创建一个spring项目,但为了从最基础开始学习spring框架,能在之前学习的基础上去学习spring,因此基于maven的创建方式是有必要去了解的。具体流程创建maven项目选择以Maven方式去创建(不用选择任何模板)Next.2.自定义名称和存储路径,Finish3.检查maven本地仓库是否为自己配置的国内仓库3.配置

2021-07-20 12:01:42 397

原创 二叉树精选习题 !!!

*按之字形顺序打印二叉树二叉树的镜像按之字形顺序打印二叉树题目描述链接请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。示例1输入: {8,6,10,5,7,9,11}返回值: [[8],[10,6],[5,7,9,11]]import java.util.*;/*public class TreeNode { int val = 0; TreeNode left =

2021-06-27 10:47:35 166

原创 链表习题复习

*剑指 Offer 18. 删除链表的节点删除链表中的节点移除链表元素剑指 Offer 24. 反转链表链表的中间结点返回倒数第 k 个节点合并两个排序的链表链表分割删除链表中重复的结点链表的回文结构剑指 Offer 52. 两个链表的第一个公共节点判断链表是否有环返回链表入环的第一个节点剑指 Offer 18. 删除链表的节点剑指 Offer 18. 删除链表的节点题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入:

2021-06-14 18:47:19 151

原创 驼峰命名day(44)

题目描述:从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,例如“hello_world”;而Java则采用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写,例如“helloWorld”。请你帮可怜的程序员们自动转换变量名。输入描述: 输入包含多组数据。 每组数据一行,包含一个C语言风格的变量名。每个变量名长度不超过100。输出描述: 对应每一组数据,输出变量名相应的骆驼命名法。示例:输入: hello_world

2021-06-09 22:24:10 152

原创 MySql复习

MySql数据库基本操作:表基本操作:字符串类型:日期类型:索引底层实现结构:数据库基本操作:查询所有数据库:show databases;删除数据库:drop database db_name;使用数据库:use db_name;创建数据库:create database db_name (if not exists db_name) character set utf-8;表基本操作:查看表结构: desc table_name;创建表:create table table_

2021-06-08 16:49:42 164

原创 关于JVM

JVM:jvm组成的5个部分;类加载机制(jvm加载)(双亲委派模型 破坏双亲委派模型的三个场景);垃圾回收a.判断什么是垃圾?b.垃圾算法c.垃圾处理器(7种 主要 GMS/G1)JMM(让jvm高速运行的机制)JVM布局(JDK1.8):堆:new object(); 所有的对象都存在此区域,栈:a.局部变量:8大基本数据类型,对象的引用;b.操作栈: 每个方法都会对应一个操作栈;c.动态链接:指向常量池的方法引用;d:方法返回地址:PC寄存器的地址;本地方法栈

2021-06-01 22:32:26 196 1

原创 HashMap AND ConcurrentHashMap AND Hashtable:

HashMap:非线程安全的容器,JDK1.7死循环JDK1.8数据覆盖JDK1.7死循环分析:HashMap: 数组 + 链表 /红黑树面试题: HashMap, Hashtable,ConcurrentHashMap 的区别?HashMap是线程安全的容器, 它在JDK1.7会造成死循环,JDK1.8会造成数据覆盖;Hashtable 实现线程安全的手段比较简单,是直接在put方法整体加了一把锁,使用synchronized 修饰,因此性能不高,所以使频率不高;而Concurren

2021-05-31 22:54:23 144 1

原创 JUC下的常见类

JUC下常见的类JUC( java.util.concurrent):JUC( java.util.concurrent):ReentranLocal(lock写在try之外;一定要在finaly里面进行unlock())信号量(Semaphore):Semaphore 是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore 可以用来构建一些对象池,资源池之类的,比如数据库连接池。

2021-05-31 21:26:41 322 1

原创 三角形(day27)

题目描述:(牛客)【三角形】给定三条边,请你判断一下能不能组成一个三角形。输入描述:输入包含多组数据,每组数据包含三个正整数a、b、c(1≤a, b, c≤10^100)。输出描述:对应每一组数据,如果它们能组成一个三角形,则输出“Yes”;否则,输出“No”。解题思路:数学知识: 三角形任意 两边之和大于第三边,两边之差小于第三边; 题目要求 (1≤a, b, c≤10^100) 所以要注意输入类型 。代码如下:import java.util.*;public class Mai

2021-05-29 16:48:05 83

原创 常见的锁策略<二>

常见的锁策略1.公平锁:(锁的获取顺序必须和线程方法的先后顺序保持一致)公平锁指的是锁的分配机制是公平的,通常先对锁提出获取请求的线程会先被分配到锁,ReentrantLock 在构造函数中提供了是(true)否(false)公平锁的初始化方式来定义公平锁。2.非公平锁:(锁的获取顺序和线程获取锁的前后顺序无关)JVM 按随机、就近原则分配锁的机制则称为不公平锁,ReentrantLock 在构造函数中提供了是否公平锁的初始化方式,默认为非公平锁。非公平锁实际执行的效率要远远超出公平锁,除非程序

2021-05-29 13:47:52 138

原创 常见的锁策略<一>

常见的锁策略1.乐观锁:关于CAS:CAS底层实现原理:CAS缺点:ABA问题2.悲观锁:3.共享锁:读写锁:3.独占锁(非共享锁):1.乐观锁:(性能比较高)乐观锁假设认为数据一般情况下不会产生并发冲突,只有在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果没有发现并发冲突了则执行修改,如果有冲突则返回失败。关于CAS:java中的乐观锁基本都是通过CAS(Compare and swap,字面意思:“比较并交换”)操作实现的,CAS是一种更新的原子操作,比较当前值跟传入值是

2021-05-29 13:33:52 105 1

原创 自定义阻塞队列

自定义阻塞队列生产者消费者模型:import java.util.Random;/** * 自定义阻塞队列 */public class ThreadDemo89 { static class MyBlockingQueue { private int[] values; // 实际存储数据的数组 private int first; // 队首 private int last; // 队尾 private int

2021-05-27 21:32:55 135

原创 单例模式(饿汉,懒汉)

目录单例模式:饿汉方式:懒汉方式:1. 单线程版本(线程不安全)2.多线程版本(性能低)3.多线程版本(二次判断-性能高)单例模式:提升程序的性能方式:多线程;单例模式(设计模式基础);设计模式:单例模式(手写);工厂模式(简单工厂,抽象工厂);模板模式…单例模式:整个程序的运行中只存储一个对象。饿汉方式:(线程安全)饿汉缺点分析: .程序启动之后就会创建,但是创建完了之后有可能不会使用,从而浪费了系统资源。class Singleton { // 1.创建

2021-05-27 17:32:31 95

原创 关于ThreadLock

ThreadLock(线程本地存储)在之前学习关于线程安全的时候,知道了解决线程不安全问题的三种方式,即:synchronized同步锁 (加锁和释放锁);Lock 手动锁; 使用私有变量(ThreadLocal );在这里将对第三种方式:使用私有变量(ThreadLocal )进行进一步学习。ThreadLocal(线程级别的私有变量),很多地方叫做线程本地变量,也有些地方叫做线程本地存储,ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一

2021-05-25 09:05:32 1174 1

原创 线程的两种执行方式 线程池的关闭 线程池的状态

目录线程的两种执行方式:1.execute执行:2.submit执行:两者区别:线程池的两种关闭方式:1.shutdown():1.shutdownNow():两者区别:线程池的状态:线程的两种执行方式:1.execute执行:(new Runnable)无返回值的:import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.conc

2021-05-24 21:35:05 440 1

原创 线程池的拒绝策略

线程池的拒绝策略拒绝策略:1.AbortPolicy(默认拒绝策略):2. CallerRunsPolicy(使用调用线程池的线程来执行任务 ):2.DiscardPolicy (忽略新任务):4.DiscardOldestPolicy(忽略老任务):5.自定义拒绝策略:拒绝策略:(JDK提供了4种,另外也可以自定义拒绝策略,因此总共有5种。)线程池中的线程已经用完了,无法继续为新任务服务,同时,等待队列也已经排满了,再也塞不下新任务了。这时候我们就需要拒绝策略机制合理的处理这个问题。JDK 内置的

2021-05-24 18:31:41 402

原创 线程池01

线程池定义:线程池的原理:线程的缺点:线程池的优点:创建方式(7种):方式1: 创建固定个数的线程池自定义线程池行为:方式2: 创建带缓存的线程池方式3: 创建可以执行定时任务的线程池方式4: 创建单个执行定时任务的线程池方式5: 创建单个线程的线程池方式6:(JDK8+) 创建单个线程的线程池方式7:定义:使用 池化技术来管理和使用线程的技术。线程池顾名思义就是事先创建若干个可执行的线程放入一个池( 容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销

2021-05-22 22:07:33 264

原创 关于线程通信机制

线程通信机制wait()方法:notify()方法:notifyAll()方法:LockSupport.park()方法:重点:一个线程的动作可以让另一个线程感知到。(在Java面试的情况中,大多数情况下,线程间的通信机制指的是线程间的交互,即线程的唤醒和阻塞。并不是字面意义上的多个线程之间互相共享和交换数据的“通信”。)wait()方法:wait():使线程停止运行,进入等待状态。public class ThreadDemo38 { public static void main(Str

2021-05-15 11:52:29 172 1

原创 关于线程安全

关于线程安全线程非安全概念:线程非安全的因素:如何解决线程非安全问题:关于synchronized关于ReentrantLock线程非安全概念:多线程执行中,程序的实际执行结果和预期不符的情况。线程非安全的因素:1. CPU抢占执行导致混乱;(万恶之源)2. 非原子性;3. 指令重排序(代码优化);(单线程情况下没有问题,可提升执行效率,但多线程下就会出现混乱,从而导致线程不安全)4. 内存不可见性;5. 多个线程同时修改了同一变量;如何解决线程非安全问题:(从造成线程不安全的条件思考

2021-05-14 17:38:34 144 1

原创 初识线程.

初识线程概念:线程分类:概念:线程可以看作轻量级的进程。(进程好比一个工厂,线程好比工厂中的流水线)进程-----线程-----协程(未来 如goLong语言)进程是系统分配资源的最小单位,线程是系统调度资源的最小单位。 一个进程内的线程之间是可以共享资源的;每个进程至少有一个线程存在,即主线程。线程是进程实质工作的一个最小单位。线程可以共享的资源:(进程不可以共享资源)打开的文件;共享内存(对象);线程不可以共享的资源:上下文 ,记账信息,状态;栈信息;优先级;面试题:

2021-05-14 13:44:41 123

原创 倒置字符串(day2)

题目描述:链接:牛客将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100输出描述:依次输出倒置之后的字符串,以空格分割示例1输入I like beijing.输出beijing. like I解题思路:1.将字符串转为字符数组并整体倒置数组;2.遇到ch[i]== ’ '就倒置初始位置(start)到

2021-05-13 09:08:44 91

原创 排序子序列(day2)

题目描述:链接:牛客牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为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-05-13 00:19:02 223

原创 小易的升级之路(day20)

题目描述:链接:牛客小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?输入描述:对于每组数据,第一行是两个整数n(1≤n<1000

2021-05-12 23:19:02 104

原创 找出字符串中第一个只出现一次的字符(day20)

题目描述:链接:牛客找出字符串中第一个只出现一次的字符.输入描述:输入几个非空字符串输出描述: 输出第一个只出现一次的字符,如果不存在输出-1示例:输入asdfasdfoaabb输出o-1解题思路:1.将输入字符串转化为字符数组并将每个元素存入HashMap中;2.拿到数组中的每个元素在HashMap中对应的value值,若value==1则输出该字符并改变flag == true(避免退出循环后继续打印-1),break结束循环,循环结束后若flag ==true

2021-05-12 22:57:37 124

原创 初学多线程之死锁

首先演示一个死锁情况(代码如下):public class ThreadDemo36 { public static void main(String[] args) { // 锁A(资源A) Object lockA = new Object(); // 锁B(资源B) Object lockB = new Object(); // 线程1 Thread t1 = new Thread(new Run

2021-05-09 17:42:59 84

原创 创建线程的三类(六种)方式

创建线程的六种方式:1.继承Thread类(2种写法)2.实现Runnable 接口的方式(3种写法)3.实现Callanle(1种写法)总结:1.继承Thread类(2种写法)继承Thread类方式写法1代码如下:/** * 方法1: 继承Thread类 */public class ThreadDemo04 { static class MyThread extends Thread{ @Override public void run() {

2021-05-04 13:09:53 135

原创 二叉树的最近公共祖先

题目描述:题目链接:添加链接描述将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。例:输入: 2,3返回:1解题思路:上述树中子节点与父节点之间的关系为root = child / 2所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 =

2021-04-23 13:39:07 561

原创 网络基础之UDP与TCP

UDP协议(用户数据报协议):UDP协议段格式:16位源端口号:它(连同源主机 IP 地址)标识源主机的一个应用进程。。16位目的端口号:它(连同目的主机 IP 地址)标识目的主机的一个应用进程。16位UDP长度 :(也就是一个UDP能传输的数据最大长度)为64kb= UDP头部长度(8字节) + 数据长度.(即2的16次方除1024 = 64kb)16位校验和:用来判断数据的正确性(数据在传输过程中是否被篡改);如果校验和出错,数据就会直接丢弃。注:这里有一个面试题: 问 : 如果UD

2021-04-21 20:49:34 212

原创 组队竞赛(java)

链接:https://www.nowcoder.com/questionTerminal/6736cc3ffd1444a4a0057dee89be789b?orderByHotValue=1&page=1&onlyReference=false题目描述牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。例如:一个队伍三个队员的水平值分别是3,3,3

2021-04-21 00:22:57 324

原创 不要二之数组解法(day6)

题目链接:https://www.nowcoder.com/questionTerminal/1183548cd48446b38da501e58d5944eb题目描述:二货小易有一个W*H的网格盒子,网格的行编号为0~ H-1,网格的列编号为0 ~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放

2021-04-20 23:18:44 69

原创 网络基础之OSI七层模型与TCP/IP四层(或五层)模型

OSI七层模型(开放式系统互联参考模型 (OPen System Interconnection)):7 层模型主要包括:1. 物理层: 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 它的主要作用是传输比特流(就是由 1、 0 转化为电流强弱来进行传输,到达目的地后在转化为1、 0,也就是我们常说的模数转换与数模转换)。这一层的数据叫做比特。2. 数据链路层: 主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。常把这一层的数据叫做帧。在这一

2021-04-18 22:38:43 356 1

原创 十进制转任意进制的实现

题目描述:给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数。(M(32位整数)、N(2 ≤ N ≤ 16))。例:输入: 7 2输出:111解题思路(参考他人题解):首先判断M正负;定义一flag,若M为负数,则将其转换为正数,同时将flag置为false。到最后输出答案时若可根据flag为false给其拼接“-”号即可。然后,定义一个String类型的ret来进行进制数输出映射,按照字符串处理进行输出比较方便,标识完正负数后,m%n和ret之间进行映射,将结果放到字符

2021-04-15 18:04:02 668 1

原创 剑指offer之和为S的连续正数序列

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?例: 输入9 . 输出 [ [1,2,3,4],[4,5]]解题思路:双指针技术法,就是相当于有一个窗口,窗口的左右两边就是两个指针,根据窗口内所有值的和来确定

2021-04-13 17:13:27 64

原创 剑指offer之删除链表中的重复节点

题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。解题思路:注意题目已指定该链表有序且重复的结点全部删除不保留,因此可以用一个虚拟头节点(可以避免单独解决头结点也为重复节点的情况),首先定义两个结点 pre 和 cur,当 cur 和 cur.next 值相等时,让cur 一直向前走,直到不等退出循环,这时候 cur 指的

2021-04-12 23:42:16 186 1

原创 Linux常用的15个基础操作指令

ls(list): 显示目录下的所有文件{白色表示普通文件,蓝色表示文件夹,红色和绿色表示其他文件}ls -l : 查看目录下的所有文件详情信息;ls -lt : 查看文件信息(按时间倒序);cd : 切换目录(cd /目录名)cd 可以跟绝对路径或者相对路径{绝对路径:以系统的相对路径作为地址的路径;相对路径:以当前地址作为根路径的地址}…/ 进入上一级路径;./ 当前路径;pwd : 查看当前所在路径关于文件操作指令:创建文件: touch 文件名创建已经存在的文件..

2021-04-12 23:16:51 104

原创 如何定位URL路径资源?

浏览器输入一个http协议的url,如何定位服务资源?1.认识URL:2.定位资源过程:<1>浏览器向DNS服务器请求解析这个URL的域名对应的IP地址;<2>解析出IP地址后,根据该IP地址和默认的端口(HTTP默认是80,HTTPS默认是443)和服务器建立TCP连接;<3>浏览器发出读取文件(URL中域名后面部分对应的带层次的文件路径)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;<4>服务器对浏览器请求作出相

2021-04-09 23:32:01 644 2

原创 剑指offer之机器人的运动范围(回溯算法)

题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?例:输入 5,10,10 返回 21解题思路(DFS遍历):1.考虑如何计算出行数和列数的数字的各位之和?由题目知满足条件的格子,也就是坐标位置的

2021-04-07 00:05:58 96

空空如也

空空如也

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

TA关注的人

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