- 博客(142)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Mybatis学习
环境说明:jdk 8 +MySQL 5.7.19maven-3.6.1IDEA学习前需要掌握:JDBCMySQLJava 基础MavenJunit1、简介1.1、什么是MyBatisMyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象
2021-11-13 14:03:35
1168
原创 剑指 Offer 59 - I. 滑动窗口的最大值
剑指 Offer 59 - I. 滑动窗口的最大值给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:提示:思路:i,j分别代表滑动窗口的左右边界,初始化i=1-k,j=0,当还未形成窗口时,将遍历到的元素加入到双端队列deque,并不断删除队列中比nums[j]小的数,保证队列的单调递减,将nums[j]加入到队列,此时队列的队头元素即为滑动窗口最大值可以将 “未形成窗口” 和 “形成窗口后” 两个阶段拆分到两个循环里实现。代码虽变长,但减少了冗余的判断操作。暴力解法
2022-06-02 22:49:17
222
2
原创 每天一道面试题05:HashMap相关面试题
hash冲突:key通过hash函数得到的结果作为地址存储键值对,当计算发现这个地址已经存储了键值对,这就发生了hash冲突。1、开放定址法:一旦产生了冲突,就按某种规则去寻找另一空地址,若发生了第 i 次冲突,试探的下一个地址将增加di,基本公式是:线性探测:di = i平方探测:di = ± i2( +12, -12, +22, -22……)双散列:di = i * h2(key)2、再哈希法:对冲突的hash值再进行哈希处理3、链地址法:将产生冲突的元素放在一个单链表上4、建立公共溢出区:将哈希表分为
2022-06-02 22:47:59
197
原创 每天一道面试题04:Java集合类相关面试题
常见Java的集合类List列表ArrayList,基于数组LinkList,基于链表Vector,基于数组,线程安全Stack栈,后进先出ArrayQueue,数组队列,先进后出setHashSet,基于哈希表LinkHashSet,基于链表TreeSet,基于树mapHashMap,基于哈希表LinkHashMap,基于数组TreeMap,基于哈希表QueueArrayDeque,数组实现的双端队列ArrayList底层是一个Object
2022-05-30 18:43:17
239
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 58 - II. 左旋转字符串
剑指 Offer 58 - II. 左旋转字符串描述数组切片class Solution { public String reverseLeftWords(String s, int n) { return s.substring(n,s.length())+s.substring(0,n); }}数组遍历拼接class Solution { //列表遍历拼接 public String reverseLeftWords(String s, in
2022-05-30 17:09:21
126
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 58 - I. 翻转单词顺序
剑指 Offer 58 - I. 翻转单词顺序描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: "the sky is blue"输出: "blue is sky the"示例 2:输入: " hello world! "输出: "world! hello"解释: 输入字符串可以在前面或
2022-05-30 16:16:46
142
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 57 - II. 和为s的连续正数序列
剑指 Offer 57 - II. 和为s的连续正数序列描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5滑动窗口思路:通过题目可得,我们需
2022-05-28 19:15:12
107
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 57. 和为s的两个数字
剑指 Offer 57. 和为s的两个数字描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51
2022-05-28 19:06:56
122
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 56 - II. 数组中数字出现的次数 II
剑指 Offer 56 - II. 数组中数字出现的次数 II剑指 Offer 56 - II. 数组中数字出现的次数 II描述在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31遍历统计
2022-05-28 09:29:04
232
原创 【Java】力扣 - 刷题笔记 - 剑指 Offer 56 - I. 数组中数字出现的次数
剑指 Offer 56 - I. 数组中数字出现的次数剑指 Offer 56 - I. 数组中数字出现的次数描述一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums.lengt
2022-05-28 09:26:54
253
原创 面试题2.0
面经试题Java基础为什么会出现4-3.6=0.400001在二进制系统中无法精确的表示1/10所以浮点数不适用于无法接受舍弃误差的金融计算中,应使用BigDecimal类型本质:0.5能够表示,因为它可以表示成为1/20.75也能够表示,因为它可以表示成为1/2+1/(2^2)0.875也能够表示,因为它可以表示成为1/2+1/(22)+1/(23)0.9375也能够表示,因为它可以表示成为1/2+1/(22)+1/(23)+1/(2^4)但是0.1不能够精确表示,因为它不能表示成为1
2022-05-25 14:13:27
463
原创 设计模式七大原则
一、什么是设计模式软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。设计模式的重要性拿实际工作经历来说, 当一个项目开发完后,如果客户提出增新功能,怎么办?。(可扩展性,使用设计模式,软件具有很好的扩展性)如果项目开发完后,原来程序员离职,你接手维护该项目怎么办? (维护性[可读性、规范性])目前程序员门槛越来越高,一线 IT 公
2022-05-18 15:20:08
391
原创 每天一道面试题03:HTTP状态码
HTTP状态码一、常见200——服务器成功返回页面304——(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。400——(错误请求)服务器不理解请求的语法404——请求的网页不存在500——(服务器内存错误)服务器遇到错误,无法完成请求二、1xx 临时响应表示临时响应,需要请求者继续执行操作。100——(继续)服务器表示已经收到请求的第一部分,正在等待请求者发送其他部分101——(切换协议)请求者已要求服务器切换协议,服务器确认并准备切换三、2xx
2022-03-10 20:10:00
158
原创 每天一道面试题02:打开一个网页使用了哪些协议?
**DNS协议(应用层):**将域名解析为IP,输入域名时,将其发送给“DNS服务器”,就会返回对应的IP。本机在解析域名时,首先会在host文件中查找,如果查到就直接使用,否则就发送给DNS服务器。TCP/IP协议:IP协议用来寻找地址(即传输数据的目标节点)对应网络层;TCP协议用来规范传输规则的,对应传输层。IP负责找地址,TCP负责具体的传输。TCP/IP是一套规则,并不能具体工作,就像程序中的接口一样,而Socket是TCP/IP协议的一个具体实现。**HTTP协议:**应用层协议,在TCP/
2022-03-10 20:09:03
7725
原创 每天一道面试题01:synchronized使用及其原理
synchronized关键字是用来控制线程同步的synchronized的使用public class testThead implements Runnable { int count = 0; @Override public void run() { synchronized (this) { System.out.println(count++); } }}testThead的调用testThe
2022-03-10 18:41:11
394
原创 面试题总结归纳
1、为什么重写equals还要重写hashcode?两个方法均为判断两个对象是否相等,如果重写equals时,不重写hashcode,会导致某些场景下,例如将两个相等的自定义对象存储在set集合中,会出现程序异常的情况。2、==和equals的区别==equals速度快速度慢操作符方法比较基本类型时:对比对象的值;比较引用类型时:对比对象的引用地址对比对象的值3、为什么会出现4-3.6=0.400001在二进制系统中无法精确的表示1/10所以浮点数不适用
2022-02-23 13:00:20
800
原创 计算机操作系统复习
目录一、操作系统引论操作系统的定义多道程序设计技术操作系统的特征批处理系统单道批处理系统多道批处理系统二、进程和线程程序并行执行的条件【重点】进程的概念进程的基本状态1.三种基本状态2.3种基本状态的转换3.创建状态和退出状态挂起状态挂起状态的引入进程状态的装换重点一、操作系统引论操作系统的定义操作系统是用来管理计算机系统的操作系统的任务:在相互竞争的程序之间有序的控制中央处理器、内存存储器以及其他输入输出设备的分配多道程序设计技术定义:经多个程序同时放入内存,让他们共享系统中的资源特点:
2021-11-13 21:23:54
1004
原创 【Java】力扣 - 刷题笔记 - 35
【Java】力扣 - 刷题笔记 - 35描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1代码代码一暴力破解法: 时间复杂度:O(n) 空间复杂度:O(1)class Solution {
2021-11-09 17:12:48
137
原创 【Java】力扣 - 刷题笔记 - 704
【Java】力扣 - 刷题笔记 - 1828描述给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums
2021-11-09 16:44:04
298
原创 【Java】力扣 - 刷题笔记 - 1828
【Java】力扣 - 刷题笔记 - 1828描述给你一个数组 points ,其中 points[i] = [xi, yi] ,表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。同时给你一个数组 queries ,其中 queries[j] = [xj, yj, rj] ,表示一个圆心在 (xj, yj) 且半径为 rj 的圆。对于每一个查询 queries[j] ,计算在第 j 个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆 内 。请你返回一个数组 answe
2021-11-04 08:46:52
187
原创 Linux——vi命令使用
vi命令查看文件view filename常用命令1.:w只保存编辑的内容,但是不退出Vim编辑器.就是将内存缓冲区的数据刷新到Vim打开的文件中.2.:w!强制写数据到文件中.这个命令的场景就是当某个文件只有读权限,没有写权限时,可以将数据强制写入到文件中,但是前提是用户是该文件的属主,当然超级用户不存在这个限制.3.:wq保存编辑的内容并退出Vim编辑器.4.:wq!强制写数据到文件中并退出Vim编辑器.这个命令的前提和:w!命令一样5.ZZ注意:是大写Z.
2021-10-23 17:57:09
323
原创 JDBC
目录JDBCJDBCJDBC (Java DataBase Connection) 是通过JAVA访问数据库所以需要对数据库有基本的理解和应用MySQL基础
2021-05-22 16:52:43
143
原创 Java多线程
目录程序、进程、线程程序、进程、线程程序(program) 是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process) 是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域线程(thread) ,进程可进一步细化为线程,是一个程序内部的一条执行路径。若一个
2021-05-18 19:10:26
131
4
原创 hashcode原理 / 比较器 / 聚合操作
目录hashcode原理比较器ComparatorComparable聚合操作hashcode原理List的查找效率低下HashMap的查找效率好,几乎不花时间。类似平时查字典,先找目录找到多少页,然后直接翻到对应的页码就好了,而这个页码就是HashMap中的hashcodeHashMap性能卓越的原因hashcode概念:所有的对象都会有一个对应的hashcode(散列值)保存数据:在对应的hashcode上放对象,如果该hashcode已经存在对象,那么就在该位置创建一个链表,接
2021-05-14 11:41:14
6975
原创 2021-05-14
目录关系与区别ArrayList和HashSetArrayList和LinkListHashMap和HashTable几种Set关系与区别ArrayList和HashSet ArrayList有顺序,HashSet没有顺序 ArrayList元素可以重复,HashSet元素不能重复ArrayList和LinkList ArrayList是顺序结构,插入、删除数据慢,定位快 LinkList是链式结构,插入、删除数据块,但定位慢HashMap和HashTable
2021-05-14 11:34:58
89
原创 二叉树
目录插入数据遍历二叉树由各种节点组成,,每个节点有左子节点和右子节点插入数据小、相同的数据放左边,大的放右边遍历遍历的种类有:前序遍历中序遍历后序遍历实例:package List;import java.util.ArrayList;import java.util.List;/** * 集合框架——二叉树 * * @author Aike * @create 2021-05-08 11:05 *///二叉树概念// 具有左右节点,左右节点
2021-05-14 11:31:28
114
原创 Collection和Collections
目录CollectionCollectionsCollectionCollection是Set List Queue和Deque的接口,且和Map没有关系CollectionsCollections是一个类,容器的工具类,如同Array是数组的工具类一样。Collections中有许多方法,可以对容器进行操作反转reverse混淆shuffle排序sort交换swap滚动rotate线程安全化synchronizedList实例:package List;import
2021-05-14 11:24:20
72
原创 异常处理
目录异常处理的定义常见异常处理try catch使用异常的父类进行catch多异常捕捉方法多catch,一个catch接收一个异常单catch接收多个异常finallythrowsthrow和throws的区别练习异常分类可查异常运行时异常错误三种分类面试题:运行时异常与非运行时异常的区别Throwable类Throwable练习自定义异常创建自定义异常抛出自定义异常异常处理的定义异常定义: 导致程序的正常流程被中断的事件,叫做异常实例:package exception;import jav
2021-04-19 23:29:49
103
原创 Java序列化
目录Java序列化普通序列化成员是引用的序列化同一对象序列化多次的机制Java序列化序列化的含义、意义以及使用场景序列化:将对象写入到IO流中反序列化:从IO流中恢复对象意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。使用场景:所有可在网络上传输的对象都必须是可序列化的,比如RMI(remote method invoke,即远程方法调用),传入的参数或返回
2021-04-05 18:58:44
103
原创 Java 泛型
目录Java泛型泛型方法设置有界类型参数泛型类类型通配符设置类型通配符上限Java泛型什么是泛型泛型就是定义一种模板,例如ArrayList,然后在代码中为用到的类创建对应的ArrayList<类型>泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
2021-04-05 17:08:51
187
原创 Java Object 类
目录Java Object 类Object类的方法Java Object clone() 方法Java Object 类Java Object类是所有类的父类,也就是说Java所有类都继承了Object,子类均可以调用Object的所有方法。Object类位于java.lang包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承Object,称为Object的子类。Object类可以显示继承,也可以隐式继承。Object类的方法类的构造函数Object()
2021-04-05 16:14:23
88
原创 Java Iterator(迭代器)
目录Java Iterator迭代元素删除元素Java IteratorJava Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合。Iterator是Java迭代器最简单的实现,ListIterator是Collection API中的接口,它扩展了Iterator接口。迭代器it中几个基本操作是next、hasNext和remove。调用it.next()会返回迭代器的下一个元素,并且更新迭代器的状态。调用it.hasN
2021-04-04 10:41:00
62
原创 Java HashSet
目录Java HashSet基本操作导入及其初始化基本操作迭代HashSetJava 集合框架Java HashSetHashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 允许有 null 值。HashSet 是无序的,即不会记录插入的顺序。HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。HashSet 实现了 Set 接口。HashSe
2021-03-31 14:58:57
70
原创 Java LinkedList
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。链表可分为单向链表和双向链表。一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较
2021-03-30 19:04:13
73
原创 Java ArrayList
目录Java ArrayListArrayList基本使用初始化添加、访问、修改、删除迭代其他的引用类型ArrayList排序Java ArrayList方法Java ArrayListArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。ArrayList基本使用初始化ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式
2021-03-29 17:20:32
171
原创 集合框架
Java集合框架什么是集合框架每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架被设计成要满足以下几个目标:该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。该框架允许不同类型的集合,以类似的方
2021-03-29 16:00:38
117
原创 Java接口
Java接口接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用
2021-03-28 15:15:36
75
原创 Java封装
Java封装在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。封装的优点良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员
2021-03-28 09:56:36
47
原创 多态
多态多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。多态的优点消除类型之间的耦合关系可替换性可扩充性接口性灵活性简化性多态存在的三个必要条件继承重写父类引用指向子类对象:Parent p = new Child();//多态class Shape { void draw() { }}class Circle extends Shape { void draw() { Sy
2021-03-27 16:20:25
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人