极客时间:数据结构与算法之美【学习笔记+思考实践】

本篇是 《极客时间:数据结构与算法之美》课程的学习笔记和带有自己的一些思考实践。
原文学习链接如下:https://time.geekbang.org/column/intro/100017301

  • 开篇词 | 从今天起,跨过“数据结构与算法”这道坎
  • 01 | 为什么要学习数据结构和算法?
  • 02 | 如何抓住重点,系统高效地学习数据结构与算法?

开篇词 | 从今天起,跨过“数据结构与算法”这道坎

边读边练,写代码时考虑性能方面的问题,进行时间、空间复杂度分析。

遇到问题,解决之后进行思考、研究透彻。

技术人成长的姿势:关注架构和技术趋势的概念、设计思想、实践为能力。

不管上层衍生出来多少新技术、新产品,都依赖于底层的基础知识,所以基础知识才是核心和本质。

基础知识包括:

  • 数据结构与算法。
  • 计算机组成原理。
  • 操作系统。
  • 计算机网络。
  • 编译原理。
  • 数据库原理。

基础知识决定技术高度和建造技术大楼的速度和质量。

学习的过程需要思考和时间,而不是死记硬背,思考怎么用?为什么需要?如何用?设计思想是什么?应用场景有哪些?

所有知识转化为能力的过程,都是逻辑思维的锻炼和动手能力的实践提升,而绝不是死记硬背,机械的重复记忆。

对于生活中遇到问题的态度和处理:
人生路上,我们会遇到很多的坎。跨过去,你就可以成长,跨不过去就是困难和停滞。而在后面很长的一段时间里,你都需要为这个困难买单。对于我们技术人来说,更是这样。既然数据结构和算法这个坎,我们总归是要跨过去,为什么不是现在呢?

数据结构和算法是一个普通程序员和一个优质高潜质程序员之间永远的区分线。

01 | 为什么要学习数据结构和算法?

面试,数据结构和算法基础知识是对长期潜力的考察。

算法思维将实际问题抽象为数学问题,然后用计算机将数学问题用代码进行表示和处理。

学习任何知识如果不是为了去应用解决实际问题,那便毫无意义。

多刁难自己,多给自己提问,然后去解决,在解决的过程中就可以学到更多新知识。简而言之就是在学习方面不要放过自己,随时挑自己的刺。

即使是直接调用类库接口,也至少应该知道根据自己的业务应该调用哪个类的哪些接口,更深层次来说,你经常调用的接口难道就没有兴趣了解一些实现?这些实现凭什么可以被放在标准库中使用?实现的时候有没有什么缺点?如果让你实现,你是否实现的比标准库好?不断给自己提问,然后去解决,解决的过程就会学到更多知识,自己的知识地图不断扩大,深度越深越能接触到底层最本质的原理,逻辑思维能力和解决问题的能力就会不断提升。

如果自己经常使用的东西,都不知道该如何取用,都不知道实现和原理,那是多么可怕的事情。

写出达到开源水平的框架才是目标。

高手之间的竞争是细节的竞争:
算法够不够优化—时间复杂度,数据存取效率是不是够高—响应时间,内存是不是足够节省—空间复杂度。

做事情需要有难度梯度,需要思考,在解决问题的过程中提升能力。走出舒适区,不断锻炼自己。

即学即用,即用即学。

在实践中遇到问题去思考,然后带着问题去学习,是非常高效的学习方法。

学习数据结构和算法的目的:

  • 建立时间、空间复杂度意识,写出高质量的代码,提升编程能力。
  • 能够设计基础架构。
  • 训练逻辑思维。
  • 积攒人生经验。
  • 长期看来,大脑的思考能力是个人最重要的核心竞争力,算法是为数不多的能够有效训练大脑思考能力的途径之一。
  • 获得工作汇报,实现价值。
  • 完善人生。

掌握了数据结构与算法,看待问题的深度,解决问题的角度就会完全不一样。不只是编程方面,生活中的各个方面,遇到各种问题,会因为你的逻辑思维能力获得锻炼和提升而处理的更好。

02 | 如何抓住重点,系统高效地学习数据结构与算法?

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

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

相关文章

java面试题-spring与mybatis框架面试题

spring与mybatis框架面试题 面试官:Spring框架中的单例bean是线程安全的吗? 候选人: 嗯! 不是线程安全的,是这样的 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会…

Qt6中使用Qt Charts

官方文档:Qt Charts 6.5.2 如果你是使用 CMake 构建的,则应在 CMakeLists.txt 中添加如下两行代码: find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(mytarget PRIVATE Qt6::Charts) 其中 mytarget 为你的项目名称。一共…

SpringBoot初级开发--服务请求(GET/POST)所有参数的记录管理(8)

服务端在定位错误的时候,有时候要还原现场,这就要把当时的所有入参参数都能记录下来,GET还好说,基本NGINX都会记录。但是POST的请求参数基本不会被记录,这就需要我们通过一些小技巧来记录这些参数,放入日志…

vue打包的基层原理

npm run build 的原理是利用 Vue CLI 的构建工具,根据项目中配置的各种规则,将源代码转换成可在浏览器中运行的静态文件。 npm run build 主要做了以下几个操作: 读取项目配置:根据项目中的配置文件,如 vue.config.js&…

天津web前端培训班 前端是否适合零基础学?

随着HTML 5和ECMAScript 6的正式发布,大量的前端业务逻辑,极大地增加了前端的代码量,前端代码的模块化、按需加载和依赖管理势在必行,因此Web前端越来越被人们重视。 Web前端的就业前景 Web前端开发工程师薪资持续走高&#xff…

Spring MVC实现RESTful

在 Spring MVC 中,我们可以通过 RequestMapping PathVariable 注解的方式,来实现 RESTful 风格的请求。 1. 通过RequestMapping 注解的路径设置 当请求中携带的参数是通过请求路径传递到服务器中时,我们就可以在 RequestMapping 注解的 val…

小红书下一个爆款趋势锁定 | 秋冬种草指南

今夏「多巴胺」风靡全网,现秋日又捎来一股名为「美拉德」的风……俨然一副“新晋顶流”的架势。 如何抓住这一新趋势?本期千瓜将锁定小红书下一个爆款内容——「美拉德」,剖析笔记与底层逻辑,助力品牌洞见先机,运筹布…

uniapp 高度铺满全屏

问题&#xff1a;在有uni-tabbar的情况下&#xff0c;页面铺满剩下的部分 <template><view :style"{height:screenHeightpx}" class"page"></view> </template> <script>export default {data() {return {screenHeight: &q…

长胜证券:主板或以震荡整理为主 结构性行情持续

长胜证券指出&#xff0c;技术面看&#xff0c;沪指3150点上方谨慎看多&#xff0c;缩量横盘整理代表强势&#xff0c;向上打破需市场放量且权重配合&#xff0c;后市若打破并站稳3230点可视为强势回转行情开启&#xff0c;考虑到短期人民币弱势格局&#xff0c;主板或以震动整…

山东企业ITSS认证条件

申请ITSS认证的条件 1、ITSS认证一级升级为定量级应满足以下基本条件&#xff1a; 具有独立的法人资格; 运维服务能力体系已根据运维服务能力成熟度的一级特征和关键指标建立&#xff0c;并已有效运行六个月以上; 能够提供运营和维护服务的管理、人员、资源、技术和流程的有…

【PCL-11】提取平面上层的目标物,剔除平面下层目标物

因项目需求,需提取平面上的物体,不提取平面下的物体,尝试采用超体聚类+LCCP分割的方式,但由于上层点云模型一侧有空洞,导致分割效果不理想。 这里采用pcl::ExtractPolygonalPrismData类,实现平面上物体的提取。 pcl::ExtractPolygonalPrismData类是通过设定处于同一平面模…

力扣(LeetCode)算法_C++——字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”…

电脑入门: 路由器初学者完全教程

路由器初学者完全教程 本文以Cisco2620为例,讲述了路由器的初始化配置以及远程接入的配置方法,探讨了如何使用内部网络的DHCP服务功能为远程拨入的用户分配地址信息以及路由器常见故障的排除技巧。 (本文假定Cisco2620路由器为提供远…

React三属性之:props

作用 将父组件的参数传递给子组件 父组件 import ./App.css; import React from react; import PropsTest from ./pages/propsTest class App extends React.Component{render(){return(<div><h2>App组件</h2><PropsTest obj{{name:王惊涛,age:27}}>…

基于qt软件的网上聊天室软件

1.服务器: 1).功能: 用于创建一个客户端&#xff0c;通过文本编辑器来获得端口号&#xff0c;根据获得的端口号创建服务器&#xff0c;等待客户端连接 创建成功会提示服务器创建成功 在收到客户端发送的信息时&#xff0c;把这条信息发送给其他所有客户端&#xff0c;实现群…

【Linux-Day9-进程间通信】

进程间通信 前提引入&#xff1a; 我们之前接触过管道 | 将前一个命令的输出结果作为后一个命令的输入 如&#xff1a;ps | grep “sleep” 其实就是将 ps 的结果写入到一个区域&#xff0c;在从这个区域读出目标数据 有名管道 mkfifo 创建管道文件 : mkfifo fifo ->创…

ip_vs 原理解析 (四)hook 后的开始 NF_INET_LOCAL_OUT

NF_INET_LOCAL_OUT 根据优先级依次是 ip_vs_local_reply4&#xff0c;ip_vs_local_request4 | -- ip_vs_local_reply4| -- ip_vs_out| -- ip_vs_fill_iph_skb // 填充 ip 头| -- ip_vs_proto_data_get // 根据 ip 头获取协议对应的 ipvs data| -- pp->conn_out_ge…

python模块之 Motor 异步pymongo

一、介绍 Motor 是一个用于在 Python 中操作 MongoDB 的异步驱动程序。它是基于 asyncio 库构建的&#xff0c;充分利用了异步编程的优势&#xff0c;使得在 Python 中进行 MongoDB 数据库操作更加高效和灵活 异步支持&#xff1a;Motor 使用 asyncio 库提供异步操作的能力。…

单片机采集传感器数据(整形,浮点型)modbus上传

浮点型数据 占两个寄存器&#xff08;四个字节&#xff09; short 整形 占一个寄存器 &#xff08;两个字节&#xff09; 注意&#xff01;&#xff01;&#xff01;&#xff01; stm32 是小端模式&#xff0c;而modbus解析数据是大端模式 所以先发送高字节 如int a16777220…

selenium 自动化测试——环境搭建

安装python&#xff0c;并且使用pip命令安装 selenium pip3 install selenium 然后尝试第一次使用selenium 完成一个简单的测试自动化脚本 from selenium import webdriver from selenium.webdriver.common.by import By import timedriver webdriver.Chrome() driver.get(…