- 博客(40)
- 收藏
- 关注
原创 常见排序算法
交换排序一、冒泡排序冒泡排序是排序算法中较为简单的一种,英文称为Bubble Sort。它遍历所有的数据,每次对相邻元素进行两两比较,如果顺序和预先规定的顺序不一致,则进行位置交换;这样一次遍历会将最大或最小的数据上浮到顶端,之后再重复同样的操作,直到所有的数据有序。有n个数据,需要n - 1趟比较,时间复杂度 O(n2),空间复杂度O(1)以升序冒泡排序为例,冒泡排序就是要**每趟排序过程中通过两两比较相邻元素,将小的数字放到前面,大的数字放在后面。**代码如下:package com.wa.
2022-05-15 20:43:06 235
原创 前缀和preSum
1.定义一维数组:前缀和(Prefix Sum)的定义为:对于一个给定的数列 A, 它的前缀和数列 S 是通过递推能求出来得 部分和。Leetcode上的一道题目:****//写法一:public int[] runningSum(int[] nums) { int[] preNum = new int[nums.length]; for(int i = 0; i < nums.length;i++){ if(i == 0){
2022-05-04 21:35:08 1075
原创 PriorityQueue优先级队列
1.PriorityQueue概述Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。父子节点的编号之间有如下关系:leftNo = parentNo*2+1rightNo = parentNo*2+2parentNo = (nodeNo-1)/2优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,及默认
2022-04-27 11:31:09 288
原创 MySQL
1.什么是MySQLMySQL 是⼀种关系型数据库,在Java企业级开发中⾮常常⽤,因为 MySQL 是开源免费的,并且⽅便扩展。阿⾥巴巴数据库系统也大量⽤到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的, 因此任何⼈都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进⾏修 改。MySQL的默认端⼝号是3306.2.存储引擎存储引擎: 数据文件在物理磁盘上不同的组织形式,主要包括InnoDB、MyISAM、MEMORY。查看MyS
2022-04-26 17:15:15 2545
原创 142.环形链表
142.环形链表给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。方法一:哈希表遍历链表中的每个节点,将每个节点加入Hash表,若该
2022-04-26 10:22:15 225
原创 [Redis]
1.redis 简介Redis是使用C语言开发的数据库,但Redis的数据是存在内存中的(内存数据库),读写速度非常快,Redis被广泛应用于缓存方向,此外,还经常用来做分布式锁和消息队列。Redis提供了多种数据类型来支持不同的业务场景,Redis支持事务、持久化、Lua脚本、多种集群方案。Q1:为什么要⽤ redis/为什么要⽤缓存主要从“高性能”和“高并发”这两点来看待这个问题高性能: 假如⽤户第⼀次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该⽤户访问的数据存在缓
2022-04-25 21:12:44 598
原创 JVM相关
1、JVM的位置2、JVM的体系结构3.结构分类线程私有的:程序计数器虚拟机栈本地⽅法栈线程共享的:堆⽅法区直接内存(⾮运⾏时数据区的⼀部分4、类加载器我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们的ClassLoader负责将这些class文件给加载到JVM中去执行。 JVM中提供了三层的ClassLoader:Bootstrap classLoader:主要负责加载核心的类(java.lang.*等),构造ExtClas
2022-04-22 19:15:16 858
原创 刷题细节扫盲
Integer. valueOf()方法的作用Integer. valueOf()可以将基本类型int转换为包装类型Integer,或者将String转换成Integer,String如果为Null或“”都会报错getOrDefault()方法的使用1.getOrDefault(key,default)作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。2.key的值相同,使value的值加一。比如需要统计一个字符串中所含的字母及对应字母的个数。方法:(1)定义一个哈希表
2022-04-14 20:19:34 377
原创 131.分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ]思路1、先切割2、判断切割后的字串是否为回文class Solution { List<List<String>> res = new ArrayList<>(); List<String> path = new ArrayList<&
2022-04-03 10:44:59 424
原创 102. 二叉树的层序遍历
102. 二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。需要借助辅助队列public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); if(root == null){
2022-03-23 10:02:03 667
原创 遍历二叉树
参考代码随想录 主要分两类:迭代遍历 和 递归遍历迭代遍历每次写递归,都按照这三要素来写确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定单层递归的逻
2022-03-22 11:02:03 298
原创 347. 前 K 个高频元素
347. 前 K 个高频元素题目:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。这道题之前看了好几遍,不太了解的接口太多,一直就放下了,今天终于把它搞定了!补充知识:1.getOrDefault()方法的使用1.getOrDefault(key,default)作用:如果存在相应的key则返回其对应的value,否则返回给定的默认值。2.key的值相同,使value的值加一。比如需要统计一个字符串中所含的字母及对应字母的
2022-03-21 10:32:12 270
原创 239. 滑动窗口最大值
题目:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。我原本的思路1.将所有元素存入到栈中 声明res数组2.取出k个元素放到数组temp 找出最大值 赋值给res[0]3.接下来对数组剩下的元素:移除数组temp前一个元素,在后面新增一个,找出最大值时间复杂度为O(n*k),最后测试的时候超出时间限制思路:其实队列没有必要维护窗口里的所有元素,只需要维护
2022-03-20 19:38:32 82
原创 spring10:事务管理
学习路径 b站up主:遇见狂神说 微信公众号:狂神说声明式事务回顾事务事务在项目开发过程非常重要,涉及到数据的一致性的问题,不容马虎!事务管理是企业级应用程序开发中必备技术,用来确保数据的完整性和一致性。事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。事务四个属性ACID原子性(atomicity)事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用一致性(consistency)一旦所
2022-03-19 20:36:27 184
原创 spring09:整合MyBatis
学习路径 b站up主:遇见狂神说 微信公众号:狂神说步骤1、导入相关jar包junit<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version></dependency>mybatis<dependency> <g
2022-03-19 20:19:09 111
原创 spring08:AOP面向切面编程
学习路径 b站up主:遇见狂神说 微信公众号:狂神说什么是AOPAOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。Aop在Spring中的作用提
2022-03-19 19:53:56 74
原创 spring07:静态动态代理模式
学习路径 b站up主:遇见狂神说 微信公众号:狂神说代理模式为什么要学习代理模式,因为AOP的底层机制就是动态代理!代理模式:静态代理动态代理学习aop之前 , 我们要先了解一下代理模式!静态代理静态代理角色分析抽象角色 : 一般使用接口或者抽象类来实现真实角色 : 被代理的角色代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .客户 : 使用代理角色来进行一些操作 .代码实现Rent . java 即
2022-03-18 22:02:42 97
原创 spring06:使用注解开发
学习路径 b站up主:遇见狂神说 微信公众号:狂神说说明在spring4之后,想要使用注解形式,必须得要引入aop的包在配置文件当中,还得要引入一个context约束<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
2022-03-18 21:42:01 84
原创 spring05:Bean的自动装配
学习路径 b站up主:遇见狂神说 微信公众号:狂神说自动装配说明自动装配是使用spring满足bean依赖的一种方法spring会在应用上下文中为某个bean寻找其依赖的bean。Spring中bean有三种装配机制,分别是:在xml中显式配置;在java中显式配置;隐式的bean发现机制和自动装配。这里我们主要讲第三种:自动化的装配bean。Spring的自动装配需要从两个角度来实现,或者说是两个操作:组件扫描(component scanning):spr
2022-03-18 21:09:05 88
原创 spring04:注入依赖
学习路径 b站:遇见狂神说 微信公众号:狂神说Dependency Injection概念依赖注入(Dependency Injection,DI)。依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 .注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 .构造器注入见spring03Set 注入 (重点)要求被注入的属性 , 必须有set方法 , set方法的方法名由set + 属性首字母大写 , 如果属性是boolean类型 ,
2022-03-18 20:41:34 93
原创 spring03:第一个spring程序hellospring
学习路径 b站up主:遇见狂神说 微信公众号:狂神说HelloSpring导入Jar包注 : spring 需要导入commons-logging进行日志记录 . 我们利用maven , 他会自动下载对应的依赖项 .<dependencies> <dependency> <groupId>org.springframework</groupId> <artifac
2022-03-18 20:11:35 89
原创 创建线程的3种方式
1.继承Thread类1)创建一个类,继承 Thread并重写 run 方法2)创建对象 执行 start 方法//创建线程方式一:继承Thread类,重写run()方法,调用start()开启线程public class TestThread1 extends Thread{ @Override public void run() { //run()方法线程体 for (int i = 0; i < 20; i++) {
2022-03-17 21:35:07 4703
原创 多线程相关
线程状态线程方法1.线程停止停止线程不推荐使用JDK提供的 stop()、 destroy()方法。【已废弃】推荐线程自己停止下来建议使用一个标志位进行终止变量 ,当flag=false,则终止线程运行。package com.wang.demo4;//测试Stop//建议线程正常停止---->利用次数,不建议死循环//2.建议使用标志位--->设置一个标志位//3.不要使用stop或者destroy等过时或不建议使用的方法public class Tes.
2022-03-17 21:31:42 95
原创 静态代理模式 、生产者消费者
静态代理模式:StaticProxy代理对象和真实对象都要实现同一个接口代理对象要代理真实角色注意的是,静态代理的函数,随着传入参数不同,目标对象也就会调用不同的参数package com.wang.demo3;public class StaticProxy { public static void main(String[] args) { //原来:You you = new You();you.hhappyMarry(); WeddingC.
2022-03-17 21:13:23 59
原创 Lamda表达式
1、介绍1、λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda2、避免匿名内部类定义过多3、可以让你的代码看起来很简洁4、去掉了一堆没有意义的代码,留下核心的逻辑5、其实质属于函数式编程的概念(params) -> expression[表达式](params) -> statement[语句](params) -> {statements}2.推导过程定义接口,实现类 -> 静态内部类 -> 局部内部类 -> 匿名内
2022-03-17 21:09:19 75
原创 spring02:IOC理论推理
学习视频路径 b站up主:遇见狂神说学习资料来源 微信公众号:狂神说IOC基础新建一个新的maven项目分析实现先用原来的方式写一段代码:1.先写一个UserDao接口public interface UserDao { public void getUser();}2、再去写Dao的实现类public class UserDaoImpl implements UserDao { @Override public void getUser() {
2022-03-17 20:40:38 72
原创 spring01概述
学习视频:b站 遇见狂神说学习资料:微信 狂神说简介Spring理念 : 使现有技术更加实用 . 本身就是一个大杂烩 , 整合现有的框架技术!官网 : http://spring.io/官方下载地址 : https://repo.spring.io/libs-release-local/org/springframework/spring/GitHub : https://github.com/spring-projectshttps://repo.spring.io/ui/native
2022-03-17 20:20:31 92
原创 左旋字符串
题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”限制:1 <= k < s.length <= 10000思路:反转区间为前n的
2022-03-16 09:51:37 42
原创 Leetcode 151:翻转字符串中的每个单词
题目:给你一个字符串 s,颠倒字符串中 单词 的顺序。单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a good example”输出: “example good a”
2022-03-16 09:46:50 462
原创 MyBatis07:缓存
学习路径 b站up主:代码狂神说 微信公众号:狂神说1.简介1、什么是缓存 [ Cache ]?存在内存中的临时数据。将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。2、为什么使用缓存?减少和数据库的交互次数,减少系统开销,提高系统效率。3、什么样的数据能使用缓存?经常查询并且不经常改变的数据。2.Mybatis缓存MyBatis包含一个非常强大的查
2022-03-14 20:17:24 83
原创 MyBatis06:动态SQL
学习路径 b站up主:代码狂神说 微信公众号:狂神说1.介绍什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句.官网描述:MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。虽然在以前使用动态 SQL 并非一件易事,但正是 MyBatis
2022-03-14 20:14:15 105
原创 MyBatis05:一对多和多对一处理
学习视频路径 b站up主:代码狂神说学习资料路径 微信公众号:狂神说1.多对一的处理多对一的理解:多个学生对应一个老师 ,关联如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师!集合数据库设计CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8
2022-03-14 20:08:04 97
原创 Mybatis04使用注解开发
学习视频路径 b站up主:代码狂神说学习资料来源 微信公众号:狂神说1.面向接口编程大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的
2022-03-14 19:58:22 109
原创 MyBatis03:ResultMap及分页
学习路径 b站up主:代码狂神说 微信公众号:狂神说1.问题要解决的问题:属性名和字段名不一致--------resultMap1、查看之前的数据库的字段名2、Java中的实体类设计public class User { private int id; //id private String name; //姓名 private String password; //密码和数据库不一样! //构造 //set/get //to
2022-03-14 19:52:07 302
原创 Mybatis02CRUD操作及配置解析
学习视频来源 b站up主:代码狂神说学习文档来源 微信公众号:狂神说selectselect标签是mybatis中最常用的标签之一select语句有很多属性可以详细配置每一条SQL语句SQL语句返回值类型。【完整的类名或者别名】传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】命名空间中唯一的标识符接口中的方法名与映射文件中的SQL语句ID 一一对应idparameterTyperesultType需求:根据id查询用户1、在UserMap
2022-03-14 19:45:44 108
原创 Mybatis01第一个程序
学习视频来源 b站up主:代码狂神说学习资料来源 微信公众号:狂神说MyBatis简介环境说明:jdk 8 +MySQL 5.7.19maven-3.6.1IDEA什么是MyBatisMyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Ja
2022-03-14 19:36:02 88
原创 Leetcode链表题
Leetcode链表19.给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。//暴力解法 计算链表长度n public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNode(0,head); ListNode curr = dummy; int len = 0; while(head != null){
2022-03-09 19:43:59 108
原创 C++提高编程(黑马程序员视频个人总结)
C++提高编程1.STL初识1.1 STL的诞生长久以来,软件界一直希望建立—种可重复利用的东西C++的面向对象和泛型编程思想,目的就是复用性的提升大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作为了建立数据结构和算法的—套标准,诞生了STL1.2 STL基本概念STL(Standard Template Library,标准模板库)STL从广义上分为:容器(container)算法(algorithm)迭代器(iterator)容器和算法之间通过迭代器进行无缝
2020-10-09 15:22:10 1284 2
原创 C++核心编程(黑马程序员视频个人总结)
C++核心编程1.内存分区模型1.1.1.四个区代码区:存放函数体的二进制代码,由操作系统进行管理----共享、只读全局区:存放全局变量、静态变量及常量,常量区中存放const修饰的全局变量和字符串常量,程序结束时由操作系统回收。栈区:由编译器自动分配释放,存放函数的参数值、局部变量等注意事项:不要返回局部变量的地址堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。在c++中主要利用new在堆区开辟内存。int *p=new int(10);//指针本质也是局部变量,放
2020-10-09 15:19:55 1130 2
原创 C++基础知识(黑马程序员视频个人总结)
C++基础语法入门1.水仙花数 每个位上的数字的三次幂之和相加等于这个数,如153=13+33+53。 个位:153%10 十位:153/10%10 百位:153/10/102.跳转语句goto语法:goto标记。若标记存在,执行到goto语句时,跳转到标记goto FLAG;…FLAG:…;3.一维数组名用途//(1)可以统计整个数组在内存中的长度int arr[10];cout<<"整个数组所占内存空间:“<<sizeof(arr)<
2020-10-09 15:18:52 752 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人