自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode-位运算

1. 不用加减乘除做加法public int Add(int a, int b) { int res = a; while(b != 0){ res = a ^ b; b = (a & b) << 1; a = res; } return res; }2. 位1的个数public int HammingWeight(uint n) {

2022-01-29 09:07:15 517

原创 Leetcode-贪心算法

1. 剪绳子特殊处理n = 2, 3, 4的情况,当n >= 5的时候,尽量剪成长度为3的绳子,若最后剩的长度为4则不用再减了,最后各段绳子相乘即为最大乘积。

2022-01-29 08:37:11 523

原创 Leetcode-哈希表

文章目录哈希表1.最长连续序列2. 表中环的入口节点3. 单词拆分哈希表1.最长连续序列方法一:可采用哈希表, 首先将数组中的所有数存在哈希表里,第二遍历数组,依次判断数组中的元素的前一个值是否在hash表中,直到数组中的元素的前一个值不在hash表中,则该值为某个连续序列的第一个值,则可看从该值开始的每一个值是否都在hashset里,计算出连续序列的长度,最后输出最长的序列。2. 表中环的入口节点方法一:可通过快慢指针的方式,当快指针和慢指针相遇的时候,慢指针指向头指针,接下来慢指针和快指针都一

2022-01-28 21:57:01 407

原创 Leetcode-数组问题

文章目录七、数组问题1. 整数转罗马数字2. 罗马数字转整数3. 整数反转4. 盛最多水的容器5. 删除有序数组中的重复项6. 移除元素七、数组问题1. 整数转罗马数字通过两个数组分别存储从1000 、900、500、400、100、90、50、40、10、9、5、4、1对应的罗马数组,同伙比较,用字符串拼接的方式来拼接成罗马数字2. 罗马数字转整数先使用字典将1,5,10,50,100,500,1000和对应的罗马值以键值对的方式存起来,然后将字符串转成char类型的数组,遍历数组,找到每一个字

2022-01-21 09:05:37 120

原创 Leetcode-动态规划

文章目录八、动态规划1. 斐波那契数列2. 青蛙跳台阶问题3. 最小路径和4. 最少的硬币数目5. 股票的最大利润6. 买卖股票的最佳时机 II7. 买卖股票的最佳时机 III(多看)8. N皇后9. 岛屿数量八、动态规划1. 斐波那契数列方法一:Fib(n) = Fib(n - 1) + Fib(n - 2), 可采用递归的方法,获取n的值方法二:定义两个变量mm和nn用来表示n-1的值和n-2的值,只需要O(n)的时间复杂度和O(1)的空间复杂度即可得到n的值2. 青蛙跳台阶问题本质上就是斐

2022-01-21 09:03:39 989

原创 Leetcode-前缀和

文章目录五、前缀和问题1. 实现一个字典树2. 单词之和3. 最长公共前缀五、前缀和问题前缀树又叫字典树,应用于统计和排序大量的字符串,常被搜索引擎系统用于文本词频统计,优点是最大限度的减少无谓的字符串比较,核心思想是空间换时间的,利用字符串公共前缀降低查询时间的开销1. 实现一个字典树包括增加单词,减少单词,查询单词,查询公共前缀创建一个结构体,包括通过该字符的个数(pass)以及以该字符结尾的个数(end)以及nexts[26] (a~z),多练习即可2. 单词之和单词之和 - Leet

2022-01-21 09:02:03 4469

原创 Leetcode-滑动窗口

文章目录四、滑动窗口1. 存在重复元素 II2. 长度最小的子数组3. 无重复字符的最长子串字符串中的变位词字符串中的所有变位词四、滑动窗口1. 存在重复元素 II方法一(最优解): 散列表, 从头遍历, 若hashset里存在nums[i], 则返回true, 否则添加下一个元素,若hashset的Count大于窗口宽度,则删除nums[i - k]2. 长度最小的子数组方法一:利用两个变量记录最小子数组的下标,进行移动方法二:利用hashtable,其实是一样的,只是用hashtable.C

2022-01-21 08:59:59 5289

原创 Leetcode-二叉树

文章目录三、二叉树1. 二叉树的前中后序遍历2. 二叉树的层序遍历3. 二叉树的深度4. 二叉树的镜像5.验证二叉搜索树6. 平衡二叉树7. 二叉树的最近公共祖先8. 二叉树最底层最左边的值9. 二叉搜索树的第k大节点三、二叉树1. 二叉树的前中后序遍历构建一个二叉树,可以用最笨的方法构建,然后可用递归的方法非递归实现:前序遍历:1)每次从栈中弹出一个节点,打印输出2)先右节点后左节点压栈,周而复始中序遍历:1)将每棵子树的左节点压栈,然后弹出节点打印输出2)将弹出节点的右节点(如果有的话

2022-01-21 08:58:21 93

原创 Leetcode-链表

目录二、链表1.复制带随机指针的链表2.分隔链表3.回文链表的判断4. 排序链表5. 反转链表6. 旋转链表7. 合并两个有序链表二、链表1.复制带随机指针的链表第一步:将链表的每一个节点后面都新建一个和该节点值一样的节点,第二步:根据老节点的rand指针将新节点的rand指针添加上,第三步:将链表按照奇偶数分成两个链表,取第二个链表注意: 首先要判空,第二要注意复制前的链表的结点的random为空情况的判断2.分隔链表笔试:把单链表放到数组里,用partition,数组排序后用node穿起

2022-01-21 08:56:28 413

原创 Leetcode-排序算法

目录排序算法1. 快速排序2.归并排序3.堆排序排序算法1. 快速排序第一步:找到一个基准数,大于该数的放在数组的右边,小于该数的放在左边第二步:分别对左右进行同样的操作,依次遍历,直到排好序时间复杂度: O(N*logN) 空间复杂度o(logN) 不稳定算法优化思路:基准数的选取,可以采用随机数,也可采用三数取中法当分隔开的子序列小于一定大小时,采用插入排序代替快速排序(因为递归操作,在小数组的时候快排比插入排序慢)2.归并排序第一步:采用经典的分治策略,首先进行分,将数组分成小数组

2022-01-21 08:55:08 698

原创 Datawhale数据分析思考与问题解决

软件安装及学习中碰到的问题及解决办法链接附上‘conda’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。解决办法“添加环境变量:我的电脑—右键属性—高级系统设置—环境变量—系统变量—Path—双击进入—新建—浏览—找到Anaconda和Scripts的路径添加,然后点击确定就好了。”https://blog.csdn.net/ITLearnHall/article/details/81708148 //安装Anaconda的软件及环境https://blog.csdn.net/m0_

2021-06-16 00:33:17 432

原创 Java基础01

文章目录1.为啥说字符串是不可变的2.什么是重载,什么是重写重载(Overload):重写(Override):3.什么是多态4.动态绑定5.oop 面向对象编程6.封装的优点7.抽象类和接口的区别和联系8.强制类型转换9.hashCode方法和equals⭐10.反射⭐11.代理⭐Cglib代理:1.为啥说字符串是不可变的不可变对象:一旦对象被创建并初始化后,内部的状态数据就会保持不变根本原因:String类是被final修饰,并且内部得大部分属性都是final修饰得,除了字段hash是通过字符串

2020-09-07 16:38:29 662

原创 面试宝典——JVM(一)09.03.02

Java虚拟机在执行Java程序的过程中会把它所管理的内容划分为若干个不同的数据区域,具体如图:程序计数器:一块较小的内存空间,作用可看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。Java虚拟机的多线程:通过线程轮流切换并分配处理器执行时间的方式来实现的。为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计

2020-09-04 22:26:03 872

原创 thymeleaf th:value 多个值拼接 使用+号(不适用于th:field)

字符串拼接拼接字符串通过 + 或者 | 进行拼接th:text="a+{a}+a+{b}">th:text="|${a} ${b}|"><select name="docId" id="docId" lay-search> <option th:each="doctor:${doctor}" th:text="${doctor.docName} + '('+$

2020-08-08 23:28:04 5442

原创 什么是 java 序列化?什么情况下需要序列化?

序列化:将 Java 对象转换成字节流的过程。反序列化:将字节流转换成 Java 对象的过程。当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。序列化的实现:类实现 Serializable 接口,这个接口没有需要实现的方法。实现 Serializable 接口是为了告诉 jvm 这个类的对象可以被序列化。注意事项:某个类可以被序列化,则其子类也可以被序列化声明为 static 和 transient 的成员变量,不能被序列化。static

2020-07-20 23:13:32 5594

原创 什么是Java反射

Java 反射,就是在运行状态中获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等获取任意对象的属性,并且能改变对象的属性调用任意对象的方法判断任意一个对象所属的类实例化任意一个类的对象Java 的动态就体现在这。通过反射我们可以实现动态装配,降低代码的耦合度;动态代理等。反射的过度使用会严重消耗系统资源。JDK 中 java.lang.Class 类,就是为了实现反射提供的核心类之一。获取 Class 的方法 、一个 jvm 中一种 Class 只会被实例化一

2020-07-20 23:08:47 4744

原创 sleep() 和 wait() 有什么区别?

sleep()和wait()都是线程暂停执行的方法。1、这两个方法来自不同的类分别是Thread和Object,sleep方法属于Thread类中的静态方法,wait属于Object的成员方法。2、sleep()是线程类(Thread)的方法,不涉及线程通信,调用时会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()是Object的方法,用于线程间的通信,调用时会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才进入对象

2020-07-20 11:54:21 5291

原创 创建线程有哪几种方式?3种

1.继承Thread类型重写run 方法public class ThreadDemoTest extends Thread{ @Override public void run() { System.out.println("通过继承Thread类重写run方法实现接口!"); } public static void main(String[] args) { ThreadDemoTest threadDemoTest = new T

2020-07-20 08:17:10 5887

原创 线程和进程的区别?(简单介绍)

一、线程的基本概念  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。好处 :(1)易于调度。 (2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。 (3)开销少。创建线程比创建进程要快,所需开

2020-07-19 23:33:05 4716

原创 ArrayList 和 Vector 的区别是什么?

首先两个类都实现了List接口。他们都是有序不唯一的集合,说白了就是存储元素的位置是有序的(每一个元素都以一个对应的索引),相当于一个动态数组ArrayList和Vector的区别,主要包括两个方面同步性:Vector是线程安全的,也就是说它的方法直线是线程同步的,而ArrayList是线程不安全的,它的方法之间是线程不同步的如果只有一个线程去访问集合那么使用ArrayList,他不考虑线程安全的问题,所以效率会高一些如果是多个线程去访问集合,那么使用Vector数据增长性:ArrayLis

2020-07-19 16:59:12 11055

原创 String 类的常用方法都有那些?

下面列举了20个常用方法。1、和长度有关:返回类型方法名作用intlength()得到一个字符串的字符个数2、和数组有关:返回类型方法名作用byte[]getByte()将一个字符串转换成字节数组char[]toCharArray()将一个字符串转换成字符数组Stringsplit(String)将一个字符串按照指定内容劈开3、和判断有关:返回类型方法名作用booleanequals()判断

2020-07-19 08:43:11 11490

原创 如何将字符串反转?

1.StringBuilder的reverse()方法,最简单public static String reverse4(String s) { return new StringBuffer(s).reverse().toString();}2.使用字符串数组,实现从尾部开始逐个逆序放入字符串public static String reverse3(String s) { char[] array = s.toCharArray(); String reverse = "";

2020-07-19 08:39:07 10744

原创 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

结论:两个对象equals相等,hashcode必须相等,反之则不一定。两个对象**==相等**,hashcode一定相等,反之不一定成立。hashCode 的常规协定:1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。2.两个对象的equals()相等,那么对这两个对象中的每个对象调用 hashCode 方

2020-07-19 08:01:53 5634

原创 final 在 java 中有什么作用?

final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。特征:凡是引用final关键字的地方皆不可修改!(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。相信大家都具备基本的常识: 被final修饰的变量是不能够被改变的. 但是这里的"不能够被改变"对于不同的数据类型是有不同的含义的.当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引

2020-07-19 07:50:20 5738

原创 JDK和JRE有什么区别

JDK(Java Development Kit):是Java的开发运行环境,在程序员的电脑上当然要安装JDKJRE(Java Runtime Environment):是Java运行环境,如果你不需要开发只需要运行Java程序,那么你可以安装JRE。JDK包括JRE,JRE中包括虚拟机JVMJRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。JDK顾名思义是java开发工具包,是程序员

2020-07-18 22:23:52 5227

原创 @Reference 、@Resource和@Autowired的简单区分

主要谈一下对这三个注解的简单理解:1.@Reference@Reference是dubbo的注解,也是注入,他一般注入的是分布式的远程服务的对象,需要dubbo配置使用。2.@Autowiredorg.springframework.beans.factory.annotation.AutowiredSpringBoot项目中常用。简单来说就是引入由Spring容器管理的bean。[email protected]作用相当于@Autowired,只不过@

2020-07-18 07:41:36 5471

原创 关于redis,学会这10点就够了

1.简介Redis是一个key-value的nosql数据库.先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失数据。支持的数据类型比较多。主要用来做缓存数据库的数据和web集群时当做中央缓存存放seesionredis的使用场景缓存:把经常需要查询的、很少修改数据,放到读速度很快的空间(内存),以便下次访问减少时间。减轻压力,减少访问时间.计数器:redis中的计数器是原子性的内存操作。 可以解决库存溢出问题.进销存系统库存溢出。 session缓存服务器:web集群

2020-07-17 23:59:32 5719

原创 对Java中 “动态绑定“ 的理解

对动态绑定的理解简单来讲其实就是对方法调用的理解。 可能好多学习编程的人想:方法的调用我还不会吗?希望这篇博客能够给大家提供帮助,博客来源于Java核心技术(卷Ⅰ)弄清楚如何在对象上应用方法调用非常重要。下面假设要调用 x.f(args,) 隐式参数 x 声明为类 C 的一个对象。下面是调用过程的详细描述:编译器査看对象的声明类型和方法名。假设调用 x.f(param), 且隐式参数 x 声明为 C类的对象。需要注意的是: 有可能存在多个名字为 f, 但参数类型不一样的方法。例如,可能存在方法 .

2020-07-17 23:45:28 5338

原创 vue常用模板

1.element在线地址:http://blog.gdfengshuo.com/example/work/#/dashboard文档:http://element-cn.eleme.io/#/zh-CN/component/installation2.Vue Admin官网:https://admin.vuebulma.comhttps://github.com/taylorchen709/vue-admin3.vue-manage-systemhttps://github.c

2020-07-17 10:57:34 5509

转载 git:非常简单的解决git冲突

我们在开发一个项目的时候肯定会是几个人共同开发,我们必然会用到git,当然肯定会提交的时候遇到冲突。下面我就来解决一下冲突。只用简单的几条git命令。假设分支名为dev一、git pull origin dev我们在提交之前先拉取一下,养成良好的习惯。#dev是分支名,origin是指向远程提交git pull origin dev二、git status在拉取成功之后我们要查看一下状态git status如果有未提交的文件需要git add .git add . #.

2020-07-15 23:06:46 5760

原创 Dubbo的原理和机制(详解)

Dubbo学习目录Dubbo学习目录作用:提供服务自动注册,自动发现等高效服务治理方案Dubbo架构图Provider:提供者,服务发布方Consumer:消费者,调用服务方Container:Dubbo容器,依赖于Spring容器Registry:注册中心,当Container启动时,把所有可以提供的服务列表上Registry中进行注册Monitor:监听器虚线都是异步访问,实线都是同步访问蓝色虚线:都是在启动的时候完成的功能红色虚线(实线):都是运行过程中执行的功能所有的角色都是

2020-07-15 21:54:56 22786

原创 微软数据分析服务 - Microsoft Clarity

SOA(Service-Oriented Architecture):面向服务架构SOA本质是一种思想,它超越了所有的具体技术(如Web Service组件技术),也超越了所有的具体架构(如服务总线架构技术);同时SOA也包容这些具体的技术和架构。实际上SOA不是一个具体的技术,而是一个抽象的思想或是一个框架,因此SOA只是一个代号或者标记而已,它代表的是一种新的思想,它只是‘以服务为向导的新的IT时代’的IT方向指导的一个标识而已SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进

2020-07-15 16:31:41 6419

原创 rabbitmq 的使用场景有哪些?

①. 跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。②. 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法。③. 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队列,后端应用从队列里依

2020-07-11 23:53:19 7532

原创 什么是zookeeper,功能,部署模式

zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 google chubby 的开源实现,是 hadoop 和 hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。zookeeper 都有哪些功能?集群管理:监控节点存活状态、运行请求等。主节点选举:主节点挂掉了之后可以从备用的节点开始新一轮选主,主节点选举说的就是这个选举的过程,使用 zookeeper 可以协助完成这个过程。分布式锁:zookeeper

2020-07-11 23:51:58 5651

原创 说一下乐观锁和悲观锁?

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。数据库的乐观锁需要自己实现,在表里面添加一个 version 字段,每次修改成功值加 1,这样每次修改的时候先对比一下,自己拥有的 version 和数据库现在的 version 是否一致,如果不一致就不修改,这样就实现了乐观锁。...

2020-07-11 23:49:47 6061

原创 TCP&UDP区别以及三次握手四次挥手

在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库;其他类加载器:

2020-07-11 23:48:05 5697

转载 spring mvc 运行流程?

流程描述:用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;DispatcherServlet 根据获得的Handler,选择一个合适的Handle

2020-07-11 23:46:29 5475

原创 Spring IOC & AOP

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码

2020-07-11 23:44:15 5531

原创 什么是spring以及为什么要使用 spring?

1.简介: Spring是一个开源的轻量级的Java开发框架。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。2.轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对

2020-07-11 20:15:32 7417

原创 手把手教你搭建一个简单的SpringMVC环境

1.概念Spring MVC 是一个模型 - 视图 - 控制器(MVC)的Web框架建立在中央前端控制器servlet(DispatcherServlet),它负责发送每个请求到合适的处理程序,使用视图来最终返回响应结果的概念。Spring MVC 是 Spring 产品组合的一部分,它享有 Spring IoC容器紧密结合Spring松耦合等特点,因此它有Spring的所有优点。SpringMVC和Struts2的优劣分析共同点:都是表现层框架,都是基于MVC模块编写的。底层都离不开原始Serve

2020-07-11 20:02:30 6588

空空如也

空空如也

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

TA关注的人

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