![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA
文章平均质量分 55
记录JAVA学习的小知识
klaus08
这个作者很懒,什么都没留下…
展开
-
SpringMVC
Controller1. 实现 Controller 接口不需要处理器映射器适配器。ControllerTest1.javapackage com.klaus.controller;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;impo原创 2021-08-05 00:06:52 · 164 阅读 · 0 评论 -
ArrayList的add()方法
ArrayList中,add 添加引用类型变量时会直接将该变量的引用添加进去,并不会进行深拷贝复制,因为add()方法如下public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true;}可以明显看出来,他直接扩充大小然后将待赋值的元素添加,所以如果想要在 ArrayList<ArrayLi原创 2021-08-03 09:02:31 · 3427 阅读 · 0 评论 -
JZ22 从上往下打印二叉树
原题链接描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。示例1输入:{5,4,#,3,#,2,#,1}返回值:[5,4,3,2,1]思路层次遍历。解答import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Queue;public class Solution { public ArrayList<Integer> PrintFromTopToBo原创 2021-07-29 23:12:50 · 115 阅读 · 1 评论 -
2021-07-26 MyBatis注解开发
注解开发简单demo注解配置的本质是 Java 反射,底层是动态代理程序结构UserMapper.javapackage com.klaus.dao;import com.klaus.pojo.User;import org.apache.ibatis.annotations.Select;import java.util.List;public interface UserMapper { @Select("select * from user") List原创 2021-07-26 20:43:18 · 91 阅读 · 0 评论 -
JZ17 树的子结构
原题链接描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)示例输入:{8,8,#,9,#,2,#,5},{8,9,#,2}返回值:true思路从 A树(root1为根)开始和 B树(root2为根)进行匹配,root1 和 root2 的 val 相等,那么进一步深入判断他俩左右子树是否相等;如果左右不等,分别将 A 树的左右孩子和 B 树比较,直到有一方为空说明 B 树不是 A 树的子树。在 root1 和 root2 相等时,说明 A原创 2021-07-25 20:41:15 · 53 阅读 · 0 评论 -
MyBatis的CRUD
namespaceUserMapper.xml 中的 namespace的包名要和接口中的包名一致,指向 UserMapper 接口。<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- nam原创 2021-07-25 15:23:13 · 79 阅读 · 0 评论 -
MyBatis的使用
一、环境搭建CREATE DATABASE mybatis;USE mybatis;CREATE TABLE USER(id INT(20) NOT NULL PRIMARY KEY,`name` VARCHAR(30) DEFAULT NULL,pwd VARCHAR(30) DEFAULT NULL)ENGINE=INNODB DEFAULT CHARSET=utf8;INSERT INTO USER(id, NAME, pwd) VALUES(1,'klaus', '12345原创 2021-07-25 10:48:20 · 55 阅读 · 0 评论 -
2021-07-24 SpringAOP
小小的疑惑,我还是不懂啊。代理模式,切面,切入点AOP面向切面编程代理模式代理模式就是SpringAOP的底层。代理模式的分类:静态代理动态代理静态代理角色分析:抽象角色:一般使用接口或抽象类真实角色:被代理的角色代理角色:代理真实角色,会做一些附属操作客户:访问代理对象的人代理模式的好处:可以使真实角色的操作更加纯粹公共业务交给了代理角色,实现类业务的分工公共业务发生扩展的时候,方便集中管理缺点:之歌真实角色就会产生一个代理角色;代码量翻倍代码分原创 2021-07-24 17:26:49 · 40 阅读 · 0 评论 -
2021-07-24 Spring
目录Spring优点IOCIOC创建对象的方式依赖注入(DI)1. 构造器注入2. Set方式注入3. 拓展方式注入3.1 p命名空间3.2 c命名空间Bean的作用域Bean的自动装配测试环境byName自动装配byType自动装配使用注解实现自动装配@Resource和@Autowired:使用注解开发@Component 衍生的注解使用Java方式进行配置Spring优点spring是一个开源的买南非框架spring是一个轻量级的、非入侵式的框架IOC、AOP支持事务处理,对框架整合的支持原创 2021-07-24 17:25:15 · 62 阅读 · 0 评论 -
JZ16 合并两个排序的链表
原题链接描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。示例输入:{1,3,5},{2,4,6}返回值:{1,2,3,4,5,6}思路新建一个链表。对两个待合并的链表结点进行比较,总是插入两个链表中较小的那个,直到有链表为空,就把另一个链表的所有剩余结点加到新建链表的后面。解答public class Solution { public ListNode Merge(ListNode list1,ListNode list原创 2021-07-19 20:46:40 · 39 阅读 · 0 评论 -
Java 线程
目录线程使用线程继承Thread实现Runnable使用Callable和Future创建线程(Java 5)比较线程的生命周期新建、就绪运行、阻塞死亡控制线程join线程后台线程线程睡眠线程让步与sleep的区别线程优先级线程同步同步代码块同步方法同步锁死锁线程通信传统线程通信使用Condition控制线程通信使用阻塞队列控制线程通信线程组线程池包装线程不安全的类线程线程是进程的执行单元,一个进程可以有多个线程,一个线程必须有一个父进程。线程和父进程的所有线程共享该进程的资源。线程的执行是抢占式原创 2021-07-19 17:08:38 · 59 阅读 · 0 评论 -
JZ15 反转链表
原题链接描述输入一个链表,反转链表后,输出新链表的表头。示例1输入:{1,2,3}返回值:{3,2,1}思路要把链表反转,就是把从第一个结点开始遍历,依次把每个结点放在当前链表中的头结点位置,保证每次处理的结点之前子的链表是已经反转了的,直到遍历完为止。作图的话就是这样。0号结点是为了便于处理新建的附加头节点,如果要把2号结点放在当前链表的头结点位置,首先要保存附加头节点后面的内容,然后让附加头结点指向2号结点,2号结点再指向刚刚保存的附加头结点后面的内容,也就是已经反转过的链表。原创 2021-07-19 10:21:18 · 56 阅读 · 0 评论 -
JZ55 链表中环的入口结点
题目描述描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。 输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台将这2个会组装成一个有环或者无环单链表返回值描述:返回链表的环的入口结点即可。而我们后台程序会打印这个节点示例1输入:{1,2},{3,4,5}返回值:3说明:返回环形链表入口节点,我们后台会打印该环形链表入口节点,即3 示例2输入:{1},{}返回值:"null"说明:没有环,返回null,后台打印"n原创 2021-07-18 22:12:23 · 85 阅读 · 0 评论 -
2021-07-18
线程使用线程继承Thread实现Runnable使用Callable和Future创建线程(Java 5)比较线程的生命周期新建、就绪运行、阻塞死亡控制线程join线程后台线程线程睡眠线程让步与sleep的区别线程优先级线程同步同步代码块同步方法同步锁死锁线程线程是进程的执行单元,一个进程可以有多个线程,一个线程必须有一个父进程。线程和父进程的所有线程共享该进程的资源。线程的执行是抢占式的。多线程的优点:进程之间不能共享内存,但线程可以创建线程的代价小很多Java内置多线程的功能.原创 2021-07-18 18:37:11 · 40 阅读 · 0 评论 -
JZ14 链表中倒数最后k个结点
原题链接描述输入一个链表,输出一个链表,该输出链表包含原链表中从倒数第k个结点至尾节点的全部节点。如果该链表长度小于k,请返回一个长度为 0 的链表。示例1输入:{1,2,3,4,5},1返回值:{5}##思路遍历链表变量,存在数组中,然后按序创建链表。假设链表长度为n,求k个结点组成的链表,只要返回第(n - k + 1) 个结点后面的不动就好了。双指针,创建两个结点初始化都指向链表头结点,然后让第一个向后移 k 个结点,如果移动过程中指向null,说明该链表长度小于 k 直接原创 2021-07-18 15:32:03 · 120 阅读 · 0 评论 -
JZ56 删除链表中重复的结点
原题链接描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。示例1输入:{1,2,3,3,4,4,5}返回值:{1,2,5}思路乍一看以为很简单的,但是做的过程还是遇到以下都问题:去除重复结点时会保留最后一个重复结点更新链表后没办法保存,因为只创建一个cur进行操作,最后cur指向的是null。不过都已经原创 2021-07-17 16:05:48 · 50 阅读 · 0 评论 -
JZ3 从尾到头打印链表
原题链接描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。示例1输入:{1,2,3}返回值:[3,2,1]示例2输入:{67,0,24,58}返回值:[58,24,0,67]解答暴力/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val =原创 2021-07-16 09:27:10 · 135 阅读 · 0 评论 -
JZ43 左旋转字符串
原题链接描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!示例输入:"abcXYZdef",3返回值:"XYZdefabc"思路又是偷懒了直接用了String(char[], int, int)的构造方原创 2021-07-15 09:02:42 · 52 阅读 · 0 评论 -
JZ44 翻转单词序列
原题链接描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例输入:"nowcoder. a am I"返回值:"I am a nowcoder."思路看了这哥的,好原创 2021-07-14 22:02:57 · 46 阅读 · 0 评论 -
JZ64 滑动窗口的最大值
原题链接描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,原创 2021-07-13 10:33:50 · 42 阅读 · 0 评论 -
JZ63 数据流中的中位数
原题链接描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。示例1输入:[5,2,3,4,1,6,7,0,8]返回值:"5.00 3.50 3.00 3.50 3.00 3.50 4.00 3.50 4.00 "说明:数据流里面不断吐出的是5,2,3...,则得到的原创 2021-07-12 20:57:22 · 36 阅读 · 0 评论 -
Java集合(四)
Map每一个Map元素包括两个值,一个是key另一个是value,二者存在映射关系,也就是可以通过key索引得到唯一对应的value。所以Map中key不允许重复,key的相等与否通过equals()方法确定,key和value都是任何引用类型的数据。Map中的key在一起就组成了一个Set集合(无序、不重复),并且Map提供了keySet()方法,用于返回所有key组成的Set集合。Map和Set有很多相似的地方,如果把Map中存储的Key-Value对称一个变量,并且value是key的附庸,k原创 2021-07-12 17:59:28 · 64 阅读 · 0 评论 -
==和equals方法的区别
public static void main(String[] args) { String a = "a"; String b = new String("a"); String c = new String("a"); String d =c; System.out.println(a==b);//false System.out.println(a.equals(b));//true System.out.println(b==c);//fa原创 2021-07-12 17:38:53 · 43 阅读 · 0 评论 -
牛客网之SQL---持续更新
SQL1 查找最晚入职员工的所有信息select * from employeesorder by hire_date desclimit 1;SQL2 查找入职员工时间排名倒数第三的员工所有信息select *from employeesorder by hire_date desclimit 2,1;SQL3 查找当前薪水详情以及部门编号dept_noselect s.*,d.dept_no from salaries s, dept_manager dwhere s.em原创 2021-07-12 11:12:15 · 146 阅读 · 0 评论 -
JZ29 最小的K个数
原题链接描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。0 <= k <= input.length <= 10000;0 <= input[i] <= 10000。示例1输入:[4,5,1,6,2,7,3,8],4 返回值:[1,2,3,4]说明:返回最小的4个数即可,返回[1,3,2,4]也可以 示例2输入:[1], 0返回值:[]示例3输入:[0,1,原创 2021-07-12 11:11:05 · 83 阅读 · 0 评论 -
Vector补充
前面只说了vector是线程安全的。下面是对其部分源码的解读。构造函数Vector(int initialCapacity, int capacityIncrement)initialCapacity是Vector初始长度,capacityIncrement是在当前长度不够进行扩容时的扩容长度。Vector(int)只声明了初始长度,capacityIncrement是0。Vector()默认长度是10。Vector(Collection )将Collection转.原创 2021-07-11 17:00:45 · 204 阅读 · 0 评论 -
JZ21 栈的压入、弹出序列
原题链接描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入:[1,2,3,4,5],[4,3,5,1,2]返回值:false思路用一个栈模拟这个过程。① 将pushA的第一个未入栈的元素入栈,然后判断栈顶元素是不是p原创 2021-07-11 16:12:42 · 39 阅读 · 0 评论 -
JZ20 包含min函数的栈
原题链接描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数,并且调用 min函数、push函数 及 pop函数 的时间复杂度都是 O(1)。push(value):将value压入栈中;pop():弹出栈顶元素;top():获取栈顶元素;min():获取栈中最小元素。示例 输入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"] 返回值:-1,2,1,-1思考要求时间复杂度都是O(1),所原创 2021-07-11 11:09:20 · 49 阅读 · 0 评论 -
JZ5 用两个栈实现队列
原题链接描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例输入:["PSH1","PSH2","POP","POP"]返回值:1,2思路把stack1用于push,stack2用于pop达到队列FIFO的效果。没有限制两个栈的大小,所以第一次pop时直接把stack1的pop顺序push进stack2,然后stack2进行pop即可。但是第二次pop时,原创 2021-07-11 11:06:48 · 42 阅读 · 0 评论 -
JZ34 第一个只出现一次的字符位置
原题链接描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例1输入:"google"返回值:4思路还没有学到map,所以用数组模拟,str中的字符做key,数组中的值做value,一边遍历后统计字符,然后再根据str中字符的顺序依次遍历,value为1的就是要的结果。当时这里没想明白,总是想用数组下标进行遍历,但这样就没办法满足题设中第一个的要求,卡了很久。原创 2021-07-10 19:25:27 · 61 阅读 · 0 评论 -
ArrayList补充
目录构造方法1. 无参构造2.参数是int型 [0~2^31-1)3.参数是Collectinonvoid trimToSize()扩容函数void grow(int minCapacity)boolean add(E e)ensureCapacityInternal(int minCapacity)calculateCapacity()remove函数fastRemove (int index)序列化Fail-Fast构造方法ArrayList共有三种构造方法:1. 无参构造 创建一个长度10原创 2021-07-10 16:55:22 · 254 阅读 · 1 评论 -
JZ19 顺时针打印矩阵
原题链接-剑指offer 牛客网描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]则依次打印出数字[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]示例1输入:[[1,2],[3,4]]返回值:[1,2,4,3]思路如下图,要这样循环打印数组元素,可以看成 打印不同外圈的元素。因为横竖左右都有限定并原创 2021-07-10 10:38:07 · 57 阅读 · 0 评论 -
Java集合(一)
目 录1.Collection接口Collection方法1.1Iterator示例代码1.2 Set集合1.2.1 HashSet类1.2.2LinkedHasgSet类1.Collection接口数组元素既可以是基本类型的值也可以是对象(对象的引用变量);而集合里只能保存对象(对象的引用变量)。Collection方法boolean add(E e);//添加元素boolean remove(E e);//移除元素void cleat(E e);//清空集合中元素boolean co原创 2021-07-09 14:29:00 · 44 阅读 · 0 评论 -
面向对象三大特征
面向对象三大特征1. 封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问而是通过类提供的方法实现类内信息的操作和访问。可以通过JAVA中的访问控制符来实现。2. 继承实现复用。JAVA中,通过extends实现继承;每个类只有一个直接父类;java.lang.Object是所有类的直接 / 间接父类;子类获得父类的全部属性和方法(除了构造方法),但是子类仍然可以声明和父类里同名的属性或方法(重写),此时的父类中定义的的变量都背隐藏起来了,通过super.访问或调用。3. 多态原创 2021-07-07 20:18:04 · 38 阅读 · 0 评论 -
Java对象初始化新知识
在Java创建一个新的对象时, 系统先为成员分配内存, 接着开始初始化, 其顺序是: 先执行初始化块块或声明成员时指定的初始值, 再执行构造器里的初始值.原创 2020-07-08 21:16:41 · 70 阅读 · 0 评论 -
JAVA学习之final
首先谈谈final.final关键字可以用于修饰变量、类和方法,用以表示它所修饰的对象不可改变.final修饰变量时,一旦变量被赋以初值就不能重新被赋值.主要初始化方法有:定义final变量时同时赋值利用初始化块赋值构造器可以对未被赋值的final变量指定初始值实例如下public class Solution { //定义final变量时同时赋值 final int ...原创 2020-03-21 14:01:12 · 135 阅读 · 0 评论