数据结构和算法-2023.06.29

斐波那契数列

初衷💁🏻

说来也是惭愧,入行这么久了,一直没有仔细去思考为什么去做这个,之前一直游想法去好好学学数据结构和算法,一直苦于是重点学习Docker、K8S、JVM,多线程,或者是Netty,NIO,分布式相关,Spring源码,MyBaits源码这些,一直陷入到了技术的漩涡,这些技术的专业名词,说不理解,那等于白工作了这么多年,说理解但是好像有事蜻蜓点水一样,我也就只知道这个名词是做啥,但是真正的在工程中应用,怎么可能这个工程即用了Netty,然后有用了SpringCloud,然后还正好需要我进行JVM的调优,各种老年代的内存然后分片分布一下,在或者刚好也有业务场景需要进行分库分表吧,然后在Redis优化一下,然后在MQ在整上,在做一些优化吧,一个人好像可以掌握的东西可以有很多,但是不明白的是,这些真正的东西,到底属于自己真正掌握的到底有多少,其实我自己也不清楚,从去年开始,一直对源码很是执着,但是能看懂一些,但是说为什么这么设计,这么设计是很好,我复刻不出来,还原不出来那种思想,只看到了结果,怎么设计出来的这种结果的过程也不知道。

归根到底其实,也是被网络中的各种IT行业的焦虑所影响的,一直被传播要不停的学习新技术,要不停的紧跟时代的的潮流,比如JDK都出到17了,你应该立马去学习JDK17的新特性,而不用管工作需不需要用的这些特性,学习的本质,应该是让我总结问题,或者分析问题的能力得到提升,而不是让我维了学习去学习,一直没有分清楚主次,有时候仅仅是为了面试,或者为了跳槽,去背一些八股文,其实现在一些公众号,动不动就是最新大厂面试攻略,最新的技术指导方案,这些有多少可溯源的尚且不说,看了这些好像真的能去大厂一样,刻意的传播焦虑才能让这行很累,其实是自己和自己在不停的内耗我也不知道为什么, 总感觉很累,很累,学不完的知识,搞不完的新技术点,工作的本质不就是为了挣一点钱,然后生活的好一点,为什么会被环境折磨的这么累,不知道大家到底是为了什么。

扯远了,现在也是不停的反思,正过来想想,发现一直学新技术,一直不停的追新的一直没有意义,而且一直还学不完,好像就是毛驴头上的胡萝卜一直在自娱自乐。有时候很多事情很有意义,有很多事可以做,但是没有成体系的思考,和刻意的训练其实是一直在浪费时间。其实我的时间管理做的是比较烂的,好多时候都在浪费时间,唉,没办法,水平很一般。最近也是发现了自己之前一直在学数据结构,从上大学的时候开始学,然后中间反复穿插了4次,没有啃下来,那个时候看视频也好,看书也好,甚至是从0-1把代码抄下来也好,但是都没有坚持很长时间,最多也就坚持2个月,无疾而终了,我不知道是不是那个时候没有参加工作的原因,总感觉这些东西给我的提升不如学那些SpringBoot,Cloud,MQ,Redis,Docker,JVM这些东西显而易见的增长的快,还是急于求成了。造成我现在的方向极度混乱,一直学的都是简单的东西。

前几天,线上出了一些问题,我发现靠学的JVM,和优化相关的技巧其实并没有什么卵用,可以看出来的东西,第一点需要对当前平台的业务极其了解,看old和Eden才可以说可以把那些模块下的那些大对象优化一下。整体的说,还得从CPU,内存,磁盘,IO,网络,这几个方面来看,我之前一直想当然的觉得学了JVM调优就可以纵横天下了,可见想法是多么的幼稚和拙劣,格局不够高,看的不够远。其实我最根本的问题还是,对代码的思考,和编码的素养一直非常差,就因为大学的时候,自己一只在自娱自乐,学习学习这,学习学习其他的,没有去深入下去。现在往事又慢慢的爬上来了,唉自己埋下的雷还是的自己吞下去。说了这么多废话也是希望想总结一些东西,刚刚把电脑磁盘又扩了1个T,能坚持到2023年年底吧,还有2天今年上半年就过完了,我发现我之前在CSDN上写的博客也帮助到了不少人,我也希望能在这个公众号上发一些自己的记录希望也能督促我吧,没办法,如果各位觉得啰嗦,可以取关了。兜兜转转绕了一大圈,又会到了起点。希望我可以坚持下去,再次立贴每天会更新数据结构和算法相关的知识。谢谢各位监督和支持。

斐波那契数列

今天就简单总结一些斐波那契数列吧,这个东西每个视频,没个博客什么数据结构的开篇都是这些,就从这个开始吧。我也不复制粘贴了,太偷懒了,简单总结一些。

(0 1 2 3 4 5 )

0 1 1 2 3 5 8 13 

这个数列的大概意思就是第三个数就是前面两个数的之和,生动形象的比喻一下就是后天的结构,就是昨天和前天的过程;比如0 1 1 2 3 5 8 13 这一串就是满足斐波那契数列的要求,他的 第三个数,就0 +1 的结果,后面以此同理,2就是1+1的结果,3就是1+2的结果。

算法实现

下面是我做的一些算法实现,都比较简单的主要是分为了两种,第一种就是递归来实现的,第二种就是用迭代了实现的,这里面有牵扯到了递归,递归这方法我在工作中是一次都没有用过,看着简单,用着用着就容易栈溢出,非常坑爹,这家伙要是在生产上崩一次,哭都没办法哭,作为对比我还是简单的写一下。

递归实现:

public  static  int fib(int n ){if ( n <=  1 ) return  n;return  fib(n -1 )+ fib(n-2);
}

迭代实现:

public static int fib2(int n) {if (n <= 1) return n;int first = 0;int seconde = 1;for (int i = 0; i < n - 1; i++) {int sum = first + seconde;first = seconde;seconde = sum;}return seconde;
}
简单说下区别,递归实现的时候,因为是递归来实现,所以每每次进行实现的时候就需要进行在调用,其实非常不好理解,我个人水平有限,有没有百度上那些大佬解释的清楚,反正递归这个概念我自己的理解,就是函数调函数,然后1-2-3-4,4-3-2-1,这样怎么说呢,就是他不停的往里调用调用,一直调用的有返回值了就往外面吐数据。大概就是这个意思吧,所以第一个实现的时候,看起来是非常简单就两行,fib(n-1)+fib(n-2)也符合对应的调用的斐波那契数列的定义,但是,他这个非常容易栈溢出

42f3a016bc38bce3a111a23572d99c12.png

直接崩掉了,其实也可以理解就是栈的空间是存放方法的返回值的,你把这个N放得无限大,没有那么多空间可以用了呗;所以就崩了,这是我个人的理解哈,后面的迭代调用的时候,就设计的比较好了,首先用了两个first变量存放一下,seconde变量存放一下,在对应的迭代里面的时,也是比如(0 1 1 2 )这个里面看到第一次first =0 ,seconde =1 ,后面循环到第二次的时候,这个1其实作为第一次的second 其实被当做第二轮循环的first,然后呢第一轮循环的sum =first+second 的sum 值 1 其实就是第二轮的second ,就这种简单的替换,可以看到非常大的差距。fibe1 是使用的递归,fibe2使用的迭代。

7615b958606860261e9dffe3d8c86042.png

初学这个其实还绕不过算法时间复杂度和空间复杂度,学这个学了几次了,只有今天是彻底记住了这个时间复杂度的顺序,之前一直记不住这个o(1),o(logn) o(n),o(nlogn),o(n^2),o(n^3),主要是o(logn)这个和o(nlogn)这俩的顺序记不住,后面自己看了下这个logn不就是一个常数么,肯定比n小,这下顺序一下就记住了,其实好多时候学习的时候,还是想着一蹴而就,想着立马就可以变得很牛逼,多么不现实的想法。

积累,专注,持之以恒。坚持输出一下,就可以了,希望这个帖子的日常更新可以更新到2023.12.31我也希望有那么一天,刚好这个卫星的博文日更一天只能更新一次,也不用多更新,每天只输出一个简单的数据结构的知识点和自己的看法和想法。再次感谢各位粉丝朋友对我的支持和厚爱。谢谢

                                                                    2023.06.29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14.RocketMQ之高可用性机制

1.2 高可用性机制 RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。 Master和Slave的区别&#xff1a;在Broker的配置文件中&#xff0c;参数 brokerId的值为0表明这个Broker是Master&#xff0c;大于0表明这个Broker是 Slave&#xff0c;同时brokerRole参数也会说…

Flutter iOS 打包 问题处理

日常问题收集&#xff1a; remark: Incremental compilation has been disabled: is not currently compatible with embedding LLVM IR bitcode a. 在Build Settings中搜索Enable Bitcode-> 设置No b. Project-> Targets-> Build Settings-> Custom Compiler Flag…

【Vue3】CustomImport 导入文件组件

1. 效果图 2. 组件完整代码 <template><div class="custom-import-warpper"><el-dialog v-model

TCP版本的 echo server 和 echo client

这里附上博主UDP版本的echo server 和 echo client 如何编写一个最简单的 udp 版本的 echo server 和 echo client(小白也懂!)_幻荼的博客-CSDN博客 目录 目的 效果 关于服务端的代码解释 服务端代码 客户端 关于客户端代码解释 客户端代码 目的 编写一个TCP版本的ec…

Spring Boot 中的 @RabbitListenerContainerFactory 注解

Spring Boot 中的 RabbitListenerContainerFactory 注解 1. 什么是 RabbitListenerContainerFactory 在 Spring Boot 中&#xff0c;我们可以使用 RabbitListener 注解来监听 RabbitMQ 中的消息。RabbitListener 注解会自动创建一个监听器容器&#xff0c;用于接收和处理消息…

SpringMvc拦截器和手写模拟SpringMvc工作流程源码详解

目录 1. SpringMvc简介 1.1 什么是MVC 1.2 什么是SpringMvc 1.3 SpringMvc 能干什么 1.4 SpringMvc 工作流程 2. SpringMvc拦截器和过滤器 2.1 拦截器 2.1.1 拦截器作用 2.1.2 拦截器和过滤器的区别 2.1.3 拦截器方法说明 2.1.4 多个拦截器执行顺序 2.1.5 自定义拦…

RocketMQ 详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;RocketMQ 详解 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪闪发光…

解决磁盘占用率过高100%问题

方法一&#xff1a;关闭程序 首先打开任务管理器&#xff0c;单击磁盘占用率一栏进行排序&#xff0c;查看占用磁盘最高的应用。若占用率最高的始终是同一个三方程序&#xff0c;可尝试卸载。 注&#xff1a;开机时由于频繁读写磁盘&#xff0c;磁盘占用率会很高&#xff0c;等…

Destination unreachable(Port unreachable) 错误原因和解决办法

Destination unreachable(Port unreachable) 是一条由网络设备&#xff08;如路由器或防火墙&#xff09;生成的ICMP&#xff08;Internet Control Message Protocol&#xff09;错误消息&#xff0c;用于通知源设备目标设备或端口无法到达。 一、什么是ICMP ICMP&#xff08;I…

Apikit 自学日记:自动生成 API 文档

功能入口&#xff1a;API管理应用 / 选中某个项目 / 其他菜单 / 数据源同步&#xff08;API文档自动生成&#xff09; 该功能可通过配置数据源信息&#xff0c;实现基于数据源的API信息自动生成API文档。 当前支持5种数据源&#xff1a;Swagger URL、apiDoc、Github、gitlab、…

HDLBits刷题笔记7:Circuits.Combinational Logic.Karnaugh Map to Circuit

Karnaugh Map to Circuit 3-variable 实现如下卡诺图&#xff0c;用sop和pos两种方式 化简&#xff1a; module top_module(input a,input b,input c,output out ); // sop和pos相同assign out a | b | c; endmodule4-variable 实现如下卡诺图&#xff0c;用sop和pos两种方…

【每日一题】Leetcode - 剑指 Offer 43. 1~n 整数中 1 出现的次数

题目 Leetcode - 剑指 Offer 43. 1&#xff5e;n 整数中 1 出现的次数 解题思路 分解数字中的每一位&#xff0c;判断记录 结果 class Solution {public int countDigitOne(int n) {int count 0;for (int i 1; i < n; i) {int localI i;while (localI / 10 ! 0) {in…