自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Penguin

有道无术,术尚可求,有术无道,止于术。

  • 博客(42)
  • 收藏
  • 关注

原创 安卓焦点窗口切换

焦点窗口切换涉及模块较多,需要经过WMS->SF->Input三个模块传递其中对sf传给input这段相关的通信存疑,网上资料也比较少且安卓U上也有函数改动,希望能有大佬补充,上面相关流程有些地方可能不对,涉及到多个进程。

2024-04-09 13:25:53 2386 5

原创 牛客字符串转整数题解

public class Solution { public int myAtoi(String str) { int len = str.length(); // str.charAt(i) 方法回去检查下标的合法性,一般先转换成字符数组 char[] charArray = str.toCharArray(); // 1、去除前导空格 int index = 0; while (index &l.

2021-11-07 11:20:09 183

原创 我理解的最细的synchronized

前言线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据被当前正在访问的线程加上互斥锁后,在同一个时刻,其他线程只能处于等待的状态,直到当前线程处理完毕释放该锁。 在...

2021-09-07 23:38:39 2344 10

原创 尽量细的HashMap

1.HasMap基础 key-value形式 用key做hash定位 整个将k和v存储到对应位置 2.解决hash冲突方法 拉链法 开放地址法 3.jdk1.7和1.8的区别1.7 头插法 hash()->4次扰动 先扩容再插入 数组+链表 1.8 尾插法 hash()->1次扰动 数组+链表/红黑树 当前链表长度>=8 数组长度>64

2021-08-30 22:02:52 265 3

原创 Spring两大特性 之ioc

众所周知啊,这spring两大特性是 ioc 和 aopIOC,英文全称Inversion of Control,意为控制反转。AOP,英文全称Aspect-Oriented Programming,意为面向切面编程。Spring核心容器的主要组件是Bean工厂(BeanFactory),Bean工厂使用控制反转(IoC)模式来降低程序代码之间的耦合度,并提供了面向切面编程(AOP)的实现。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面编程(AOP)的容器框架。

2021-08-27 23:24:30 468

原创 从零开始学习的设计模式——外观模式

外观模式背景在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标。以医院为背景说明未引入外...

2021-08-26 23:13:05 78

原创 力扣岛屿数量问题

深度优先遍历DFS目标是找到矩阵中 “岛屿的数量” ,上下左右相连的 1 都被认为是连续岛屿。dfs方法: 设目前指针指向一个岛屿中的某一点 (i, j),寻找包括此点的岛屿边界。从 (i, j) 向此点的上下左右 (i+1,j),(i-1,j),(i,j+1),(i,j-1) 做深度搜索。终止条件:(i, j) 越过矩阵边界;grid[i][j] == 0,代表此分支已越过岛屿边界。搜索岛屿的同时,执行 grid[i][j] = '0',即将岛屿所有节点删除,以免之后重复搜索相同

2021-08-26 20:17:26 185

原创 力扣反转数组

思路:该方法基于如下的事实:当我们将数组的元素向右移动 kk 次后,尾部 k\bmod nkmodn 个元素会移动至数组头部,其余元素向后移动 k\bmod nkmodn 个位置。该方法为数组的翻转:我们可以先将所有元素翻转,这样尾部的 k\bmod nkmodn 个元素就被移至数组头部,然后我们再翻转 [0, k\bmod n-1][0,kmodn−1] 区间的元素和 [k\bmod n, n-1][kmodn,n−1] 区间的元素即能得到最后的答案。图解:代码:cl...

2021-08-26 11:02:52 320

原创 从零开始学习的设计模式——装饰者模式

概念上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。...

2021-08-26 09:54:24 96

原创 从零开始学习的设计模式——代理模式

概念在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。代理模式的定义与特点代理模...

2021-08-25 21:48:06 84

原创 力扣第三题,滑块解决无重复字符的最长子串

class Solution { //滑动窗口解决无重复字符最长字串 //时间复杂度O(2n)= O(n), public int lengthOfLongestSubstring(String s) { //如果字符串长度小于一返回n int n = s.length(); if(n<=1){ return n; } //定义最长长度maxLen int maxLen.

2021-08-25 20:44:58 96

原创 从零开始学习的设计模式——适配器模式

概述将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。如图角色登场1.目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。2.需要适配的类(Adaptee):需要适配的类或适配者类。3. 适配器...

2021-08-20 23:21:59 88

原创 动态规划解决最小路径和

题解:遍历改二维数组每个位置,记录到当前位置最短路径和定义设dpdp为大小m \times nm×n矩阵,其中dp[i][j]dp[i][j]的值代表直到走到(i,j)(i,j)的最小路径和。转移方程:1当左边和上边都不是矩阵边界时:grid[i][j]=grid[i][j]+Math.min(grid[i-1][j],grid[i][j-1]);2.当只有左边是矩阵边界时:grid[i][j]=grid[i][j]+grid[i][j-1];...

2021-08-19 22:42:26 116

原创 Jvm之垃圾收集器与内存分配策略(五)

一,低延迟垃圾收集器其一,Shenandoah收集器Shenandoah的目标实现一种能在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器。步骤初始标记(Initial Marking):与G1一样,首先标记与GC Roots直接关联的对象,这个阶段仍 是“Stop The World”的,但停顿时间与堆大小无关,只与GC Roots的数量相关。·并发标记(Concurrent Marking):与G1一样,遍...

2021-08-18 22:53:40 131

原创 Jvm之垃圾收集器与内存分配策略(四)

各款经典收集器之间的关系“并发”和“并行”并行(Parallel):并行描述的是多条垃圾收集器线程之间的关系,说明同一时间有多条这样的线程在协同工作,通常默认此时用户线程是处于等待状态。·并发(Concurrent):并发描述的是垃圾收集器线程与用户线程之间的关系,说明同一时间垃圾收集器线程与用户线程都在运行。由于用户线程并未被冻结,所以程序仍然能响应服务请求,但由于垃圾收集器线程占用了一部分系统资源,此时应用程序的处理的吞吐量将受到一定影响。一,S...

2021-08-18 21:45:47 99

原创 Jvm之垃圾收集器与内存分配策略(三)

HotSpot的算法细节实现一,根节点枚举特性:所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的现在可达性分析算法耗时 最长的查找引用链的过程已经可以做到与用户线程一起并发),但根节点枚举始终还 是必须在一个能保障一致性的快照中才得以进行——这里“一致性”的意思是整个枚举期间执行子系统 看起来就像被冻结在某个时间点上,不会出现分析过程中,根节点集合的对象引用关系还在不断变化 的情况,若这点不能满足的话,分析结果准确性也就无法保证。OopMap的数...

2021-08-17 23:23:07 84

原创 Jvm之垃圾收集器与内存分配策略(二)

垃圾收集算法从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接 垃圾收集”。一,分代收集理论分代收集理论建立在两个分代假说之上:1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。2)强分代假说(Strong Generational Hypothesis):熬过越多次.

2021-08-17 22:17:51 96

原创 Jvm之垃圾收集器与内存分配策略(一)

一,判断对象以死两种算法引用计数算法可达性分析算法(jvm使用)1,引用计数算法概念在对象中添加一个引用计数器,每当有一个地方 引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的。优缺点优点:原理简单,判定效率也很高,在大多数情况下它都是一个不错的算法缺点:很难解决对象之间相互循环引用(很难,但实际可以解决;可以类似参考spring 循环 依赖解决的方式 思路参考)...

2021-08-17 21:47:47 73

原创 从零开始学习的设计模式——建造者模式(Builder)

概念建造者模式:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性角色1、Builder:为创建一个产品对象的各个部件指定抽象接口。2、ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。3、Director:构造一个使用Builder接

2021-08-16 22:34:01 191

原创 算法菜狗子的搜索二叉树遍历

核心思想:递归树类public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; t

2021-08-16 21:41:42 66

原创 从零开始学习的设计模式——原型模式(Prototype)

概念 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。本小结会通过对象的复制,进行讲解。在Java中,复制对象是通过clone()实现的需要条件1.实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝...

2021-08-15 22:47:57 94

原创 final,finally和finalize

final,finally和finalize的区别final是用来修饰类,方法,变量,并具有不同的含义修饰类: 代表此类不可以继承扩展修饰方法:代表此方法不可以重写修饰变量:变量不可以修改fianlly则是保证Java代码必须被执行的一种机制我们使用try-finally或者try-catch-finally来进行类似1.关闭JDBC连接,2.保证unlock锁等动作finalize则是java.lang.Object的一个方法,保证对象在被垃圾收集前完成特定资源的回收,所以称为jav

2021-08-15 22:07:50 52

原创 Java四种引用

简介 在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strongly Re-ference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4种,这4种引用强 度依次逐渐减弱。引用 强引用 不会被回收 正常编码使用 软引用 内存不够了,被GC 可作为缓存 弱引用 GC发生时 可作为缓存(WeakHash...

2021-08-15 21:59:50 4593

原创 从零开始学习的设计模式——工厂模式(Factory Method)

1.普通工厂模式概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。上图:我们写一个蔡徐坤的特长的工厂类例子:创建唱跳的共同接口Cxkpublic interface Cxk { public void Cxks();}创建唱和跳的实现类继承Cxk接口public class Jump implements ...

2021-08-14 22:56:26 110

原创 从零开始学习的设计模式——单例模式(Singleton)

概念某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。特点1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。优缺点优点:只有一个实例,节约了内存资源,提高了系统性能缺点:没有抽象层,不能扩展; 职责过重,违背了单一性原则;单例模式分为懒汉式和饿汉式懒汉式其一(双重检测锁定)public class Singleton { ...

2021-08-14 11:37:12 111

原创 浅谈反射与代理(我的浅入理解)

一,反射概念Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能就是Java语言的反射机制.简单来说,就是反射可以帮助我们在动态运行的时候,对于任意一个类,可以获得其所有方法,所有的变量(是所有的!包括私有!)作用1.通过反射可以使程序代码访问装载到JVM 中的类的内部信息2.获取已装载类的成员变量信息3.获取已装载类的方法4.获取已装载类...

2021-08-13 22:02:20 142

原创 Java基础(三)

一,接口和抽象类抽象类: 1.拥有自己的普通域 2. 拥有自己的普通方法 3.继承只能一个 4. 侧重于提取共性接口: 1. 可以多继承 2. 都是抽象方法 3. 侧向与封装不可以单独实例化abstract 关键字,和哪些关键字不能共存。final:被final修...

2021-08-12 23:10:36 69

原创 Java基础(二)

一,面向对象编程三要素 封装,继承,多态1.封装封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。好处:...

2021-08-12 22:40:53 90

原创 Java基础(一)

一,八大基本类型八大基本类型,整型占四个。最熟悉的int32,长一点的Long(64),短一点的short(16),最短的byte(8). 有整数自然有小数,所以有单精度float(32)和双精度double(64) 有数学自然有语文,char字符(char可以存入基本汉字) 最后一个是判断:boolean类型表示对(true)错(false) 整数 byte--8 short--16 int--32 long---...

2021-08-12 21:34:16 65

原创 解释java是值传递

1.基本类型和引用类型在内存中的保存Java中只有按值传递。不管是基本类型还是引用类型,形参都是实参的一个拷贝。基本类型copy值,引用类型copy引用--地址;基本类型的变量保存原始值,即它代表的值就是数值本身;引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。2.值传递,引用传递 值传递:是指在调用方法时将实际参数复制一份传递到...

2021-08-12 21:04:09 492

原创 Redis 事务 与 乐观锁

Redis的单条命令是保证原子性的,但是redis事务不能保证原子性Redis事务本质:一组命令的集合。----------------- 队列 set set set 执行 -------------------事务中每条命令都会被序列化,执行过程中按顺序执行,不允许其他命令进行干扰。一次性顺序性排他性Redis事务没有隔离级别的概念Redis单条命令是保证原子性的,但是事务不保证原子性!Redis事务操作过程开启事务(multi) 命令入队 执行事务(exe.

2021-08-10 20:11:56 81

原创 Redis 基础知识

一,redis入门Redis(Remote Dictionary Server ),即远程字典服务。 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis能该干什么?内存存储、持久化,内存是断电即..

2021-08-10 17:00:52 427

原创 缓存穿透、缓存击穿、缓存雪崩

缓存穿透、缓存击穿、缓存雪崩三者思路区分:0个key 穿透 ,1个key 击穿,多个key 雪崩

2021-08-09 17:01:05 53

原创 sql刷题知识点总结

一,索引排序 order by 字段 (acs:升叙 desc:倒叙)1.mysql单个字段降序排序select * from table order by id desc;2.mysql单个字段升序排序select * from table order by id asc;3.mysql多个字段降序排序select * from table order by id desc,name desc;二,分组函数GROUP BY 和 HAVING的使用1.单个...

2021-08-07 21:44:26 692

原创 vue+spring boot 部署云服务器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、配置好前台后台域名和ip的映射关系二、在服务器上安装2个tomcat,并且可以运行成功1.修改端口号:访问的端口和8005端口2.外部访问:安全组端口对外开放,服务器防火墙对外开放2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、配置好前台后台域名和ip的映射关系阿里云和腾讯云配

2021-08-04 22:49:17 2599 5

原创 Spring boot 整合redis 加 腾讯云杂项

在Linux操作系统下整合redis如果不设置密码的话很容易被人入侵,当人家肉鸡挖矿(别问我怎么知道的)如果此时你的服务器里面没有过多的东西,那么与其找到文件删掉,不如重新安装你的系统(如下) 一,重新安装系统(腾讯云) 进入你的服务器里面,点击重置应用,微信扫码确认后,就会格式化你的服务器二,重置密码 还是刚才那个页面,点击重置密码输入新密码就会重置成功三,Linux安装redis re...

2021-07-23 22:17:13 478 1

原创 springboot + Mybatis +前端layui 项目总结(二)

一.RBAC的实现RBAC重点是数据库的构建,和返回对应前端组件的树结构。1.1角色树展示接口xml根据用户id返回layui树组件 <!--查询用户对应的角色--> <select id="selectUserRole" resultType="com.qcby.teaching.msgmanage.util.TreeNode"> SELECT r1.id, r1.role_name t.

2021-07-13 23:32:58 860

原创 springboot + Mybatis +前端layui 项目总结(一)

我分到的任务主要是登录模块,主要任务为: 1.登录模块(登录和忘记密码) 2.实现rbac模型 3.aop...

2021-07-13 21:11:41 1241

原创 Spring Mvc 参数传递

@Target({ElementType.PARAMETER}) // 只能作用于参数上@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface RequestParam { // 定义参数名称,默认和名字一致 @AliasFor("name") String value() default ""; // 定义参数名称,默认和名字一致 @AliasFor("value") Stri.

2021-06-15 20:03:44 478 1

原创 128陷阱

如图所以 当x和y在128前后输出的结果不一样,在128之前还可以判断正确,而128之后就无法判断正确。第一我们知道Integer是int类型的包装类,Java的编译器会自动帮它拆箱装箱(自动调用integer.valueOf();方法)interger i=100;integert i=integert.valueOf(100);上面的方法等价Interger.valueOf()源码如下public static Integer valueOf(int i) {...

2021-06-14 15:06:47 201

空空如也

空空如也

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

TA关注的人

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