- 博客(324)
- 收藏
- 关注
原创 算法小抄11-二叉树进阶
很多二叉树的题目都需要用递归的方式去解决,如果还没有理解递归的话先不要看这一小节哦,上一小节中我们介绍了二叉树的遍历方式,为了测试方便,我们先补充一个层序遍历的二叉树创建方式,我们希望根据给出的列表,例如【1,2,3,4,5,6】就创建出如下图所示的完全二叉树二叉树的一些概念构造几层容器在容器内没有节点的时候,代码是否会自动判断不应该继续往下构造了呢以下开始才是正片。
2023-03-27 16:55:45
571
原创 算法小抄9-快慢指针
在上一节我们已经讲过了怎么使用快慢指针去寻找链表的中点,这一节我们继续学习快慢指针的进阶用法,快慢指针不仅仅用在链表中,而是一种代码思想哦,好好体会吧测试结果如下: LinkedList:1->2->3->4->5。
2023-03-22 16:57:24
456
原创 算法小抄8--链表
链表(指单链表)是一个由头部节点引导的,通过节点指针连接在一起的数据结构,它的形状如下:相对于线性表,链表的优势在于快速的插入和删除中间的元素(这里要说明的是,如果是对于尾部元素的插入与删除,线性表其实比链表要快),两者的删除操作如下图所示:顺序表删除:链表删除:是不是发现链表删除以后2的next仍然指向3,看起来和链表内部似乎还有联系?但是从逻辑上我们已经无法通过遍历的方式在链表中查找到2了,所以2已经算是被删除了。
2023-03-20 18:49:14
407
原创 算法小抄7-二分枚举
二分枚举是二分查找的一种应用(这是我自己起的名字hhh,可别在外面说这是二分枚举的题),这类题相对于二分查找趣味性会更强一些,但是同时也需要更理解二分法的本质--枚举。
2023-03-16 11:01:32
561
原创 算法小抄6-二分查找
这里很重要哦,如果理解了这里,就离彻底理解二分写法不远了写法一适合用于在[left,right]这个范围内找到值,例如最基础的二分写法,这种写法需要判断最后返回的是left还是right,要分析最后一次循环后造成的结果写法二适合用于在[left,right]这个区间内排除值,然后在left=right=mid的时候找到最后的答案,因此写法二的if条件里写的是target值一定不存在的情况。
2023-03-15 11:09:19
776
原创 算法小抄3-理解使用Python容器之列表
算法是条件语句与循环语句组成的逻辑结构,而数据结构也就是容器. 算法决定数据该如何处理,而容器则决定如何数据如何存储. 不同的语言对容器有不同的实现方式, 但他们的功能都是相似的, 打好容器基础,你就可以在各式各样的语言中来回横跳了。对于任何一个容器来说,它的作用永远是数据的存储,它提供的API接口应该包含基本的增删改查能力与迭代遍历功能,而对于python这样的高级语言来说,你不需要管容器底部是怎么实现的,只需要关注如何使用即可。的方式,原来的列表依然没有被改变,创建了一个长度为原列表三倍的新列表。
2023-03-02 16:43:18
339
原创 算法小抄2-刷题中Python的常用语法
这里给出一个关于字符串的题目,可以自己操作实现一下: 输入一个字符串,例如abc,def,gh,将该字符串翻转成为gh,def,abc 前面我们说到,字符串是不可变的而列表是可变的,由于我们要对字符串进行翻转操作,所以我们得先将字符串转换为列表,相关的接口有。第二个不一样的点在于列表的截串有三个参数,第三个参数表示为截取的步长,犹如下方的列子,runoob这个字符串,我们截取[1,4)即uno这三个字符,步长为2,说明我们需要数2个位置截取一个字符,则结果为[u,o]
2023-02-28 13:19:17
477
原创 刷题小抄1-2数之和
已知target为7,当我们在搜索[1,2,3,4,5]这个数组的时候,能不能通过一次遍历,不使用双重循环,在搜索到5的时候感知到我们曾经搜索过2(target-x)数字呢,这里就需要使用额外空间了,只要使用一个容器,记录曾经遍历过的数字,然后在这个容器中寻找是否有target-x即可。空间复杂度比较简单,假如对于一个有n个数的数组,你的算法使用常数个变量就能解决问题,那么你的空间复杂度为常数阶O(1),假如你需要额外使用一个同样长度为n的数组来解决该问题,那么你的空间复杂度就位O(n)
2023-02-27 19:35:32
475
2
原创 MySql的安装
打开文件夹后,有一个bin文件夹,该文件夹中都是mysql相关的命令,记住它的路径,后面是有用的,对于我的配置该路径是:D:\java\mysql\mysql-8.0.32-winx64\bin。使用mysql -u root -p命令登录mysql,还记得在初始化mysql时我要你记住的密码不,使用它登录就行。初始化完成后,查看它生成的信息,在最后它会给你一个自动生成的密码,记住它,在我这里是_1tItFqWIiyW。下载完毕后,将压缩包剪切到指定路径,直接解压即可,这里我的路径如下,路径中。
2023-02-27 12:05:37
409
原创 IDEA 快捷键
Ctrl + Alt + C/F/M/P/V 抽取常量,字段,方法,参数, 变量。Ctrl + Shift + R : 在项目中查找文本并替换。Ctrl + Alt + 左/右 : 跳转到编辑过的地方。Alt + 左/右 : 回到上一个、下一个文件。Alt + 上/下 :跳到上一个、下一个函数。Ctrl + Alt + L : 格式化代码。Ctrl + ALt + T : 包裹代码。ctrl+shift+u : 大小写转化。Ctrl + R: 文件中查找文本并替换。Ctrl + F :文件中查找文本。
2023-02-14 11:10:01
466
原创 单元测试与数据库
3.在varchar字段建立索引时,必须指定索引长度,没必要对全字段建立索引,可以采用count(distinct left(列名,索引长度))/count(*)的方式来确定此长度。5.对于数据库相关的查询,更新,删除等操作,不能假设数据库里的数据是存在的,或者直接操作数据库把数据插入进去,应使用程序插入或者导入数据的方式来准备数据。5.order by的场景,注意索引的有序性,order by最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况。
2022-11-30 17:41:41
1531
原创 二.异常日志
7.方法的返回值可以为NULL,不强制返回空集合,空对象等,必须注释充分说明什么情况下会返回null值,调用方需要进行null判断防止空指针问题。5.不能在finally块中使用return,finally块中的return返回后方法执行结束,不会再执行try块中的return语句。1.应用中不可直接使用日志系统中(log4j,logback)的API,而应该以来日志框架SLF4J中的API。6.捕获异常与抛出异常必须完全匹配,或者捕获异常是抛异常的父类。
2022-11-30 16:36:00
234
原创 一. 编程规则
1.不允许任何未经定义的常量直接出现在代码中2.使用long或者Long进行初始赋值的时候要使用大写的L以免和数字1混淆3.不要用一个常量类维护所有常量,要按照常量的功能进行归类,分开维护4.如果一个变量的值只在一个范围内变化,且带有名称之外的属性,定义为枚举类。
2022-11-30 15:42:51
880
原创 22.对于BFS的思考
由两道力扣题来引出此篇内容:算法思路: 开密码锁此题看上去和上题极为相似,其实思路并不相同,第一题其实是提前建立图,然后对图进行bfs搜索得到最短距离,这题如果使用提前建立图的方法,所建立的图的大小拥有10000个节点,可是有些节点我们根本用不到,所以对于此题并没有建图的过程...
2022-06-09 10:51:40
159
1
原创 21.动态规划整理
分成元素和相等的两个部分,首先如果整体和为奇数肯定划分失败,因此需要排除此特殊情况,接下来按照背包问题进行递归分析:当求出half值后,原本问题变成了,能否在数组中找到一组数字,使得他们的值为half,典型的背包问题,dp[i][j]表示,对于arr[0]...arr[i],能否找到一组数字的和刚好为j,写出递推关系:dp[i][j]=dp[i-1][j] or dp[i-1][j-num[i-1]] 表示的是当前状态可以从不选入当前元素和选入当前元素两种选择中继承,但是此条件的成立条件首先是j>=num[
2022-06-07 19:34:58
226
原创 HashMap初始化容量到底能不能提高效率?
万恶的来源于阿里巴巴开发手册:【推荐】集合初始化时,指定集合初始值大小。说明:HashMap 使用HashMap(int initialCapacity)初始化,如果暂时无法确定集合大小,那么指定默认值(16)即可。正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即loader factor)默认为0.75,如果暂时无法确定初始值大小,请设置为16(即默认值)。反例:HashMap需要放置1024个元素,由于没有设置容量初始大小,随着元素不
2022-05-30 17:16:54
479
原创 鸟哥的Linux私房菜读书笔记-1
一个核心需要管理的事项系统呼叫接口:方便程序开发者轻易的透过与核心的沟通,将硬件资源进一步的利用行程管理:一部计算机可能同时有很多工作等待CPU运算处理,核心在这个时候必须能控制这些工作内存管理:控制整个系统的内存管理,如果内存不足,核心最好还能提供虚拟内存功能档案系统管理:例如数据的输入输出流,不同档案格式的支持装置的驱动:硬件的管理是核心的主要工作之一,装置的驱动也不例外Linux是一个操作系统,这个操作系统里含有最主要的核心以及核心提供的工具,用户通过linux的核心与硬件进
2022-05-18 11:10:03
391
原创 57.整理网络编程
最基本的Socket模型客户端和服务器之间的通信,依靠socket编程,它支持跨主机之间的通信,双方通信之前,各自需要创建一个socket,双方读取和发送数据的时候,都通过各自的socket,就想一根网线一样,一头插在客户端,一头插在服务端,然后进行通信在创建socket的时候可以指定网络层使用IPV4还是IPV6,传输层使用TCP还是UDP,服务器的程序需要先跑起来,然后等待客户端的连接和数据,以下是基于TCP的Socket编程:服务端首先调用socket函数,创建网络协议为IPV4,以及传输
2022-05-13 18:00:19
444
原创 56.整理JavaSE
封装继承多态的详细理解封装将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外的接口使之与外部发生联系,其好处在于:可以对成员进行更加自由的修改,比如设置私有属性age的时候,通过函数来setAge(),这样就可以对入参进行判断 隐藏实现细节,只对外提供必要的接口,使得程序的逻辑更好继承继承是使用已存在的类作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以使用父类的功能,但是不能选择性的继承父类,特点如下:子类可以
2022-05-13 09:30:56
160
原创 55.整理ElasticSearch
ElasticSearch基础概念?ElasticSearch是基于Lucenne的RestFul的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储,搜索,分析海量的数据全文搜索是值对每个词建立一个索引,指明该次在文章中出现的次数和位置,当查询的时候,根据实现建立的索引进行查找,并将查找的结果反馈给用户的检索方式index索引:类似于mysql中的数据库 type类型:类似于一张表,后续已经被废弃了 document文档:类似于mysql中的一行,不同之处在于ES中的每个
2022-05-11 18:05:20
301
原创 54.整理RabbitMQ
消息队列的优点?解耦:将系统按照不同的业务功能拆分,生产者和消费者都不知道对方的存在,一个只负责发布,一个只负责取异步:主流程只需要完成业务的核心功能,对于业务的非核心功能,将消息放入到消息之中进行异步处理,减少请求的等待,提高系统的总体性能削峰/限流:将请求都写到消息队列中,消费服务器按照规定速度处理请求,防止请求并发过高使系统崩溃消息队列的缺点?系统的可用性降低:系统引用的外部依赖越多,越容易挂掉,如果mq挂了,有可能导致整个系统的崩溃系统复杂度提高,数据一致性问题等消息队列
2022-05-11 16:00:01
448
原创 53.整理Java EE
Spring的组成Spring Context:提供框架式的Bean访问方式以及企业级功能(HNDI,定时任务) Spring Core:核心类库提供IOC和DI服务 Spring Aop:提供AOP服务 Spring Web:提供面向web的总和特性,对常见web框架的支持 Spring MVC:提供面向web应用的Moel-View-Controller Spring DAO:对jdbc的抽象封装,并且能统一管理JDBC事务 Spring ORM:对现有ORM框架的支持IOC?控制
2022-05-10 20:42:56
215
原创 52.整理MySQL
为什么要使用数据库?数据如果保存在内存:存取速度快,但数据不能永久保存数据保存在文件:数据永久保存,速度比内存操作慢,频繁IO,查询数据也不方便数据保存在数据库:数据永久保存,使用sql语句查询很方便,管理数据方便数据库的三大范式?列不可分,非主键列完全依赖于主键,非主键列不依赖于其他非主键,这三大范式是递进关系,比如第二范式需要在第一范式的基础上MyISAM对于Innodb引擎的区别? MyISAM Innodb 存储空间 可以被压缩,存储空间小 需
2022-05-09 11:13:54
473
原创 51.整理JVM
JVM调优的原则?不要为了调优而调优,首先确定的应该是项目的架构与代码已经没有优化的空间了,再考虑进行JVM的调优工作,不能指望通过JVM调优来使得性能有一个质的飞越 从三个属性中(吞吐量,延迟,内存)中选择两个进行JVM调优,称之为调优3选2,在处理吞吐量和延迟问题时,GC能使用的内存越大,应用运行也就越流畅,这也叫GC内存最大化原则什么情况下需要进行调优?Full GC数量频繁,GC停顿时间超长(超过1s) 应用出现OOM异常或者吞吐量下降,响应性能不高, 应用CPU占用过高,内存占用过
2022-05-08 18:40:23
465
原创 拓扑排序
定义给定一个包含n个节点的有向图,给出它的节点编号的一个排列,如果满足对于图中的任意一条有向边(u,v),u的排列都出现在v的前面,则称该排列是图的拓扑排序当图中存在环,那么它不存在拓扑排序 当图是有向无环图,那么它的拓扑排序不止一种对于拓扑排序有dfs和bfs两种方法可以求解例题-课程顺序dfs解法class Solution { // 存储有向图 List<List<Integer>> edges; // 标记每个节点的状态.
2022-05-01 20:22:18
271
原创 整理并查集
以一道力扣题来引出这个问题,此题就是查并集的原型问题,如果当问题关注连通团体的数量时,可以使用该算法来解决问题算法包含两个关键的函数和一个关键的parent数组:上级:每个团队里的代表任务,每个团队里有且只有一个,用它来标识整个团队,每个团队的其他元素通过find算法最终都能找到唯一的上级parent数组:对于parent[i]=j,它表示的是对于顶点i,它的上级是j,一般情况下会将它初始化为parent[i]=i,因为每个顶点都至少是自己的上级for (int i = 1; i
2022-05-01 18:50:29
469
原创 12.华子面经
1.CAE软件,undo,redo功能的实现?网格信息如何存储?2.Java项目在做的时候有没有遇到过问题?是怎么解决的?答:feign远程调用丢失请求头,jackson处理map丢失私有属性?3.单例模式有几种实现方式?答:恶汉,懒汉,懒汉式不安全,枚举,静态内部类,双重检查锁模式4.Java多线程的实现有几种方式?答:thread,runnable,callable+futuretask,线程池(答了四种具体的)5.JVM加载类的具体过程?加载,验证,准备,解析,初始化6.Java内
2022-04-28 20:35:20
1655
原创 2.整理华子面经--2
你知道的加密算法?MD5算法:使用哈希函数,它不是加密算法而是散列算法,它的典型应用是对一段信息产生信息摘要,以防止被篡改,无论多长的输入,md5都会输出一个128bits的一个串SHA1算法:与MD5一样流行的散列算法,安全性强于MD5,但是慢与MD5,基于MD5,SHA1的信息摘要特性以及不可逆,可以被应用在检查文件完整性以及数字签名等场景AES算法:对称的块加密算法,加解密的过程可逆RSA算法:非对称加密算法,RSA是第一个能同时用于加密和数字签名的 算法,能地方到目前为止已知的所有密
2022-04-23 16:33:59
1043
原创 1.整理华子面经--1
细说项目中遇到的难点?C++项目:撤销恢复模块:拥有三个属性: QQueue<T> memo;//用于存储中间的逻辑的双向队列 int memoIndex;//用于找到当前位置前一个状态的索引 int capacity;//用于约束双向队列的行为,容量主要函数:有参初始化指定容量,无参初始化指定容量为Integer_Max; 获取上一个状态,获取当前状态 查看index是否在左右端点处 当传入一个新的备忘录对象的时候,当前索引之后的存储在队列中的对象,然
2022-04-22 20:49:44
547
原创 50.整理Redis
Redis是单线程还是多线程的?redis4.0以前是完全单线程的,4.0时引入多线程,但是核心流程依然是单线程的,额外线程只用于后台处理如删除对象等redis6.0中,redis可以利用多线程读取网络IO数据,对数据库的操作依然是单线程的为什么单线程?在redis6.0之前,redis的核心操作是单线程的,由于redis完全基于内存操作,通常情况下cpu不会是redis的瓶颈,最有可能成为瓶颈的是机器内存大小和网络带宽,既然cpu不会成为瓶颈,那么就无需引用多线程,多线程的上下文切换,加锁
2022-04-17 15:07:48
1111
原创 49.面经整理
CAS原理CAS操作包括三个操作数-内存位置,期望值,新值,如果内存位置的值与期望值所匹配,那么更新为新值,否则不进行操作,Java中提供对CAS操作的支持,具体在sun.misc.unsafe类,其中的compareAndSwapXXX系列的方法就是通过调用JNI的C语言代码,从而调用cpu底层指令来实现的,对于常规的Intel x86平台来说,最终映射到cpu的指令为cmpxchg,这是一个原子指令,用于比较并且交换的操作CAS存在ABA问题,Java中用于使用AtomicStampedRefe
2022-04-15 21:21:06
552
原创 48.面经整理
如何理解函数式编程?函数式编程和过程式编程的区别?过程式编程:数据存储在全局变量中,并且通过函数进行处理,随着程序规模的变大,可能在多个函数中使用全局变量,很难记录哪些地方对一个全局变量进行了修改,可维护性差函数式编程:通过函数之间传递状态,避免了全局状态的问题,不依赖当前函数之外的数据,也不改变当前函数之外的数据面向对象编程:通过对象来保存状态,鼓励代码复用,鼓励拆解问题,减少开发和维护时间Lambda表达式和匿名内部类的区别?所需类型不同:lambda表达式只能是接口,匿名内部类可以
2022-04-13 10:37:30
1943
原创 10.阿里一面
1.final关键字2.synchronized和volotile的区别3.java1.8的新特性4.如何理解函数式编程?函数式编程和过程式编程的区别?5,lambda表达式和匿名类的区别?6.抽象类和接口的默认方法有什么区别7.如果一个对象的引用被置为空了,它会立即被gc收集走吗8.了解过设计模式吗,spring框架使用到的设计模式9.如何自己实现json序列化和反序列化,对象嵌套如何处理10.rabbitmq拿来做了啥11.秒杀接口设计?redisson的信号量能
2022-04-12 15:43:14
1883
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人