自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 背包问题——01—完全—多重—混合

背包问题 4种类型

2022-08-14 11:27:40 377 1

原创 Java数据结构—String

1.String为什么用final修饰?1.为了实现字符串常量池首先你要理解final的用途,在分析String为什么要用final修饰,final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写, final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。但是:虽然

2021-10-14 00:30:58 218

原创 深度学习专业术语

1.BN层解决在训练中,中间层数据分布发生变化的问题,防止梯度爆炸、梯度消失,加快训练速度。2.ReluRelu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数之间互相依存的关系,缓解了过拟合的发生。3.Sigmod第一,采用sigmoid函数,算激活函数时(指数运算),计算量大。而使用Relu,整个计算节省了很多。第二,对于深层网络,sigmoid函数反向传播时,很容易出现梯度消失的情况,(sigmoid接近饱和区的时候,变化太缓慢,导数趋于0)从而无法完成深层网络的

2021-10-10 22:17:05 571

原创 多线程——生产者消费者模型

多线程下生产者消费者模式1.什么是生产者—消费者模型?生产者+消费者+阻塞队列它可以用来解决:1.生产与消费速度不匹配的问题;2.软件开发过程中解耦。阻塞情况唤醒情况1.队列已满,阻塞生产者1.队列不满,唤醒生产者2.队列已空,阻塞消费者2.队列不空,唤醒消费者2.wait()/notify()实现注意:阻塞时只能用wait()方法,不能用sleep()方法,因为此时不释放锁。假设队列为空,那么消费者sleep,此时消费者不释放锁,那么生产者拿不到锁就不

2021-09-29 14:13:03 235

原创 Spring Cloud面试题

1、什么是 Spring Cloud?Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。2、使用 Spring Cloud 有什么优势?优点:1、服务拆分粒度更细,有利于资源重复利用,有利于提高开发效率2、可以更精准的制定优化服务方案,提高系统的可维护性3、微服务架构采用去中心化思想,服

2021-09-21 01:03:39 134

原创 SpringBoot面试题

1.SpringBoot的注解启动类上的 @SpringBootApplication这个注解包括了3个注解:@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan1.SpringBoot热部署的方式就是在应用程序在不停止的情况下,实现新的部署。1、spring-boot-devtools在 Spring Boot 项目中添加 spring-boot-devtools依赖即可实现页面和代码的热部署。<depend

2021-09-21 00:43:01 120

原创 分布式事务

分布式事务——三太子敖丙1.什么是分布式事务?分布在不同数据库、不同应用上的分布式事务。就是要在分布式系统中实现事务,它是由多个本地事务组合而成,对于分布式事务而言几乎满足不了ACID,即使单机事务大部分情况下也难以满足ACID,要不然怎么会有4种隔离级别。处理方案1:2PC——Two-phase commit protocol1.什么是2PC?2PC就是引入一个事务协调者来管理各参与者的提交和回滚,2阶段分别是准备(投票)和提交两个阶段。1.准备阶段:协调者给各参与者发送准备命令(除了

2021-09-20 17:18:16 226

原创 微服务相关问题

1、您对微服务有何了解?2、微服务架构有哪些优势?3。微服务有哪些特点?4、设计微服务的最佳实践是什么?5、微服务架构如何运作?6、微服务架构的优缺点是什么?7、单片,SOA 和微服务架构有什么区别?8、在使用微服务架构时,您面临哪些挑战?9、SOA 和微服务架构之间的主要区别是什么?10、微服务有什么特点?11、什么是领域驱动设计?12、为什么需要域驱动设计(DDD)?13、什么是无所不在的语言?14、什么是凝聚力?15、什么是耦合?16、什么是 REST / RESTful

2021-09-20 14:24:06 1834

原创 力扣树——满二叉树、完全二叉树、平衡二叉树、二叉搜索树、最优二叉树、红黑树

1.满二叉树深度为h,那节点数为:2^h-12.完全二叉树深度为h,那么前h-1层都是满的,只有第h层不满,而且是从左向右紧密排列的。3.平衡二叉树1.它可以是1棵空树;2.首先它是二叉搜索树,而且它的左右子树的深度之差绝对值不能超过1;4.二叉搜索树1.它可以是空树2.若不空,那么它中序遍历(左中右)必须是严格递增序列,不存在相同的元素;5.最优二叉树给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树。哈夫曼

2021-09-16 22:04:50 323

原创 java的main方法中的参数有什么用

1.main方法的参数作用:参数String[ ] args的作用就是可以在main方法运行前将参数传入main方法中。(这个作用,完全可以通过配置文件来取代。)特点:1.传入n个参数,args就是长度为n的字符串数组。2.当传入参数为0个时,即没有传参数时,args 是长度为0的字符串数组程序的入口方法是规定好的了,程序运行的时候最先执行的就是它,如果你不按规定进行的话,即使方法名字叫做main,编译的时候不会出现错误,运行的时候程序就找不到入口了,因为这时候会把这个main方法当作普通的方法

2021-09-15 00:46:30 3173

原创 按位十进制运算——字符串相加、字符串相乘

415. 字符串相加题目分析1.把两个字符串,从低位开始,依次相加。相当于从字符串从后向前遍历2.注意进位问题class Solution { public String addStrings(String num1, String num2) { int len1 = num1.length()-1; int len2 = num2.length()-1; int carry = 0; StringBuffer res

2021-09-14 00:47:40 322

原创 力扣刷题——位运算—只出现1次的数字

260. 只出现一次的数字 IIIclass Solution { public int[] singleNumber(int[] nums) { int ret = 0; for (int i = 0; i < nums.length; i++) { ret ^= nums[i]; } int div = 1; 假设两个数是 a、b int a=0;

2021-09-12 18:24:06 116

原创 ThreadLocal和Synchronized

一、ThreadLocal简介ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Threa

2021-09-12 00:54:58 1366

原创 Redis+Mysql+MongoDB 解决高并发问题

1.请求进来先去Redis里加锁Key:科室ID;Value:当前时间+过期时间 的毫秒数;public void orderProductMockDiffUser(String productId) { 加锁 锁的过期时间为当前时间+过期时长 long time = System.currentTimeMillis()+TIMEOUT; if(!redisLock.lock(productId,String.valueOf(time))){ thr

2021-09-10 12:03:19 395

原创 操作系统——进程、线程、内存管理、缓冲区溢出、动\静态链接

1.简单说一下并发和并行的理解?2.同步、异步、阻塞、非阻塞的概念3.什么是进程?什么是线程?3.1.进程就是正在执行的程序实例。它由操作系统进行管理,操作系统会为每个进程分配时间来占用CPU,操作系统还会为每个进程分配特定的资源。操作系统为了跟踪每个进程的活动状态,维护了一个进程表,在进程表的内部,列出了每个进程的状态以及每个进程使用的资源等。3.2.线程是进程的一个实体,有时也被成为轻量级线程。线程是CPU调度和分派的基本单位,他是比进程更小的能独立运行的基本单位。4.进程和线程的区别

2021-09-09 17:15:13 750

原创 操作系统——内存管理、虚拟内存、分段、分页、页面置换、抖动

1.内存管理虚拟内存:我们程序所使用的内存地址叫做虚拟内存地址(Virtual Memory Address)物理内存:实际存在硬件里面的空间地址叫物理内存地址(Physical Memory Address)。2.虚拟内存操作系统会提供一种机制,将不同进程的虚拟地址和不同内存的物理地址映射起来。如果程序要访问虚拟地址的时候,由操作系统转换成不同的物理地址,这样不同的进程运行的时候,写入的是不同的物理地址,这样就不会冲突了。内存管理单元:进程持有的虚拟地址会通过 CPU 芯片

2021-09-09 15:14:42 216

原创 项目问题——Redis使用List防止商品超卖

1.首先定义名为科室名称department的List队列,里边的元素都是1,元素的个数代表号源的余量;同时定义名为科室ID+User的Set,把已挂号的用户ID存入Set,保证同一个用户只能挂1个科室的1个号。2.因为 Redis 是单线程的,所以可以将并发的请求串行化,而且 Redis的 List pop 操作是原子性 的。3.所有请求打到 Redis 上,都是从 department队列上 pop 出一个元素。public void testMiaosha(){ Object goods =

2021-09-08 17:26:03 445

原创 项目问题——数据异常的处理

1.先update,再select查询,如果号源数量小于0,就抛异常1.自定义异常类,继承RuntimeException@Data@ApiModel(value = "自定义全局异常类")public class YyghException extends RuntimeException { @ApiModelProperty(value = "异常状态码") private Integer code; * 通过状态码和错误消息创建异常对象 * @pa

2021-09-08 15:17:41 147

原创 计算机网络—URL到显示的过程、Http、Https、长连接短连接

1.在浏览器中输⼊ URL 地址到显示主页的过程?

2021-09-07 22:22:35 1729 5

原创 Java——4种访问权限、4种内部类

1.访问权限范围比较:public > protected > 默认 > private属性\方法:这4个都能去修饰类:public、默认可以去修饰接口:public、默认可以去修饰修饰符同类同包子类任意位置public√√√√protected√√√×默认√√××private√×××2.Java的内部类有哪些Java的四种内部类1.成员内部类不能存在static关键字;可以直接访问

2021-09-05 15:23:54 447

原创 线程创建的3种方式和区别

0.区别继承Thread类实现Runnable接口实现Callable接口优点:编写简单,如果需要访问当前线程,无需使用**Thread.currentThread()**方法,直接使用this,即可获得当前线程优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况。优点:可以接收返回值缺点:继承了Thread类,所以不能再继承其他的父类。缺点:编程稍微复杂,如果需要访问当

2021-09-05 14:27:40 199

原创 synchronized编程实践

1.两个方法加 synchronized,一个线程进去sleep,另一个线程可以进入到另一个方法吗?答案:不能,因为synchronized会锁住当前实例对象,除非另一个方法没有synchronized修饰。如下程序,先输出22222222,再输出111111111.不加synchronized的方法是不受影响的。public class Main { public static void main(String[] args) { Test test = new Te

2021-09-05 13:17:10 202

原创 Java类加载的过程

Java:类加载过程1.加载——3件事1.通过全类名获取定义此类的二进制字节流(eg:从jar、war中获取);2.将字节流所代表的静态存储结构转换为方法区的运行时数据结构;3.在内存中生成一个代表该类的Class对象,作为方法区这些数据的访问入口。2.连接加载阶段和连接阶段的部分内容是交叉进行的,加载尚未结束,连接阶段可能就开始运行了。2.1.验证2.2.准备准备阶段:正式为类变量分配内存并设置类变量初始值的阶段,这些内存在方法区分配。注意:1.这时候进行内存分配的仅包括类变

2021-09-04 22:56:09 593 4

原创 CAS、Synchronized、ReentrantLock使用场景

1.CAS——读多写少对于资源竞争较少(线程冲突较轻)的情况此时如果使用synchronized,那么用户态、内核态的频繁切换会耗费很多资源;CAS自旋几率小,性能更高。2.Synchronized——写冲突多,强一致性的场景写入频繁的场景,线程冲突严重。此时CAS自旋概率大,会浪费更多CPU资源。3.ReentrantLocksynchronized的锁升级是不可逆的。如果是一个打车软件,那过了打车高峰期,还是重量级锁,就会降低效率;此时如果用Reentratlock就比较好。

2021-09-04 21:16:45 1134

原创 Hash——Hash分布式存储、一致性哈希问题

1.什么是Hash表?其实Hash表存储的位置,是连续的存储空间,和数组一样。链表不是连续的存储空间。以链地址法为例:它是通过Hash函数,直接根据Key计算出数据存储的地址,一个数组下标index。1.根据key,计算index = Hash(key);2.如果数组[index]不为空,则查找成功(当然链地址法还要比较equal)为空,则查找失败2.Hash冲突怎么办?链地址法拉链法公共溢出区法找一个公共的地方存放冲突的key-value。(如果冲突的数量很多,查

2021-09-02 17:54:13 499 1

原创 Spring事务——ACID、隔离级别、7种事务传播行为、注解@Transactional

1.什么是Spring事务2.Spring事务的特性——ACID原子性:事务作为最小的执行单位,不允许被分割,要么全部成功,要么全部失败;一致性:事务执行前后,数据保持一致;隔离性:并发访问数据库时,各并发事务之间是独立的,不会相互干扰;持久性:一个事务被提交后,他对数据库的改变是持久的。场景:张三给李四转账1.张三账户有100,李四有100。两者一共有200;2.张三给李四转50,这件事包括2个动作:从张三账户-50;给李四账户+50;这2个动作必须同时成功才算转账成功,否则,全部

2021-09-01 22:24:54 416

原创 Spring—IOC、AOP、JDK\CGLIB、设计模式、循环依赖

0.SpringBoot启动流程1.准备环境,根据不同的环境创建不同的Environment;2.准备、加载上下文,为不同的环境选择不同的Spring Context,然后加载资源、配置Bean;3.初始化,这个阶段刷新SpringContext,启动应用;4.结束。1.使用Spring框架的好处1.控制反转Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或者查找依赖的对象们。2.面向切面编程把应用业务逻辑和系统服务分开。3.容器Spring包含并管理应用中对

2021-09-01 17:04:35 241

原创 Bean专题——什么是Bean?怎么注册、使用?生命周期?作用域?

1.什么是Bean?Bean是被实例的、组装的、及被Spring容器管理的Java对象。Spring容器会自动完成Bean对象的实例化。创建应用对象之间的协作关系的行为被称为:装配,这就是依赖注入的本质。2.Spring三种装配方案1.隐式的bean发现机制和自动装配;1.涉及注册Bean的注解:@Component , @Repository , @ Controller , @Service , @Configration;(这些注解只局限于自己编写的类)。2.使用Bean的注解:@

2021-08-31 20:26:15 2485

原创 A_力扣刷题列表

0802—动态规划1300. 最长递增子序列354. 俄罗斯套娃信封问题剑指 Offer 42. 连续子数组的最大和剑指 Offer II 095. 最长公共子序列72. 编辑距离516. 最长回文子序列0803—动态规划21312. 让字符串成为回文串的最少插入次数312. 戳气球416. 分割等和子集322. 零钱兑换518. 零钱兑换 II3.3.二叉搜索树操作集锦98. 验证二叉搜索树700. 二叉搜索树中的搜索701. 二叉搜索树中的插入操作450. 删除二叉搜索

2021-08-28 21:55:08 230

原创 Sentinel—入门、高级、原理

4.4.流量控制的实现Sentinel所有的规则都可以在内存态中动态的查询、修改,修改后立即生效。0.主要支持的规则流量控制的规则熔断降级的规则系统保护规则来源访问控制规则动态扩展规则1.流量控制规则的实现流量控制,原理是监控应用流量的QPS或者并发线程数等指标,当达到指定的阈值时,对流量进行控制,防止被高峰击垮,保障高可用。1.1.流量控制的2种方式并发线程数:用于保护业务线程数不被耗尽;QPS :当QPS超过阈值时,采取措施进行流量控制。限流规则主要由下面几个因素组成,可

2021-08-27 14:50:18 75

原创 Java数据结构——HashMap、ConcurrentHashMap

HashMap的31个问题1:说说HashMap 底层数据结构是怎样的?jdk8前:HashMap 底层是 hash 数组和单向链表实现;jdk8后:采用hash数组+链表+红黑树的数据结构。2:谈一下HashMap的特性?我们通过put和get存储和获取对象。当我们给put()方法传递键和值时:先对键做一个hashCode()的计算,来得到它在bucket数组中的位置来存储Entry对象。当获取对象时,通过get获取到bucket的位置,再通过键对象的equals()方法找到正确的键值

2021-08-26 17:59:23 291

原创 java数据结构——HashMap的3种遍历方式

1.keySet遍历1.先把map的key单独取出,存进一个新的Set;2.再用foreach根据map.get(key),遍历出value。 Set set = map.keySet(); for (Object obj: set) { System.out.print(obj + "=" + map.get(obj) + ","); }2.Entry遍历1.使用map.entrySet(),获取Entry<>数组,存入一个新的Set;2.根据foreach.

2021-08-26 17:11:51 198

原创 mysql——行锁、表锁、页锁、间隙锁、Next-Key Locks

黄壮壮

2021-08-26 01:40:38 623

原创 mysql——MVCC并未完全解决幻读

1.可重复读级别怎么解决了幻读问题?mysql里面实际上有两种读,一种是“快照读”,一种是“当前读”。select 快照读当执行select操作是innodb默认会执行快照读,会记录下这次select后的结果,之后select 的时候就会返回这次快照的数据,即使其他事务提交了不会影响当前select的数据,这就实现了可重复读了。快照的生成当在第一次执行select的时候,也就是说假设当A开启了事务,然后没有执行任何操作,这时候B insert了一条数据然后commit,这时候A执行 select,那

2021-08-25 23:18:33 249

原创 多线程面试——线程池

1.什么是线程池?线程池提供了一种限制和管理资源的方式。每个线程池还维护一些基本的统计信息,例如:已完成的任务数量。2.使用线程池的好处?1.降低资源消耗:通过重复利用已经创建的线程,降低线程创建和销毁造成的消耗;2.提高响应速度:任务到达时,有时不必等待线程创建,就可以立即执行;3.提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会降低系统稳定性,使用线程池可以进行统一分配、调优和监控。3.创建线程池的参数有哪些?1.corePoolSize(核心线程数):当

2021-08-25 22:19:30 931 3

原创 力扣多线程刷题2—任意3个连续的都必须包括2个H+1个O

1117. H2O 生成1.题目分析——信号量解法每次生产h的线程先执行,每次hSema.acquire(); hSema信号量-1,同时oSema信号量+1;2次生产h之后,hSema用完,oSema增加到2,oSema.acquire(2)需要2个信号量,此时才能执行生产o,生产完oSema变为0生产1次o,之后,hSema信号量通过hSema.release(2);方法增加到2.2.代码class H2O { private Semaphore hSema = new Se

2021-08-16 20:51:18 161

原创 力扣多线程题目1——synchronized实现

1114. 按序打印1.题目分析无论多个线程先调用哪个方法,总是保证:first先执行、second次之、third最后;synchronized加锁,配合标志位进行实现2.代码class Foo { 1.first执行完的标志位 private boolean firstFinised = false; 2.second执行完的标志位 private boolean secondFinised = false; 3.synchronized 锁住的对

2021-08-15 21:51:17 272

原创 Java关键字—volatile、乐观锁、悲观锁、synchronized

1.JMM与内存可见性问题问题1:这个程序,主线程Main永远不会输出东西,因为线程testVolitile在自己的工作内存(即高速缓存)中把标志位flag更新为true,并写回主内存后,主线程main的工作内存中存的flag仍然是new TestVolatile()时的默认值false,并没有从主内存中获取最新的flag值true。public class Main { public static void main(String[] args) { TestVolati

2021-08-15 18:35:46 746 1

原创 5.10.如何调度考生的座位

855. 考场就座1.题目分析——线段切分法遇到动态过程中取最值的问题,肯定是要使用有序数组,常用的数据结构就是二叉堆、平衡二叉搜索树。1.本问题就是寻找某两个学生p、q为端点的线段,找出最长的线段,从中间切分开;2.建立TreeSet<int []>数据结构,存储这样的线段,按线段长度升序排列,长度相同则按左侧索引降序;int[]是一个含有两个元素的数组,分别是线段的左、右端点p、q;3.建立Map<Integer,int[]> startMap、Map<In

2021-08-14 21:48:24 107

原创 5.9.括号的合法性——使用栈

20. 有效的括号1.题目分析可以考虑使用栈,左括号直接进栈,一旦右括号出现,检查栈顶元素是否与之匹配最后,只有栈为空才说明全部匹配。2.代码class Solution { public boolean isValid(String s) { int len = s.length(); if (len % 2 == 1) return false; Stack<Character

2021-08-14 13:53:20 111

空空如也

空空如也

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

TA关注的人

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