转行做“程序员”很难?这里有几个建议...

news2024/12/23 13:10:53

“是什么?为什么?怎么样?”的灵魂三连问在我们生活中比比皆是,目的是为了清晰思考和看到事物的本质。对于编程学习也是一样,需要带着疑问从本质上去学习编。

本人是某985高校的本硕连读,非计算机科班出身,目前从事C/C++嵌入式+服务器+音视频全栈开发。我自己其实是非计算机科班出身的,那要怎么去了解编程学习呢?最高效的就是去高校官网下载计算机科班的培养方案,拿到最精确的信息,学最重要的课程。以下是某985计算机专业的核心课程。

结合自己的实际经验,我把计算机学习(除语法外)分为基础五大块。我会分开来简述,同时罗列每一块的高频面试点。

一、网络编程

目前的互联网时代,程序基本上都离不开网络,了解计算机网络是必须的。大学的课程中也基本上会开设这门课程。

那大家有没有想过,一台计算机是怎么把数据发给另外的计算机的呢?把问题再细分一下:

1、两台计算机完全没有连接,怎么通信?

2、全世界有那么多计算机,如何识别呢?---类比到人类,用什么来识别你是一个真真正正存在的人?也就是说如何识别那台特点的计算机呢?有人说我们可以 MAC或者 IP 来唯一标识啊,可是,全世界那么多计算机,有了这个IP,我们如何查询呢?难道去遍历吗?

3、多个程序同时发消息给一台计算机,计算机是如何准确把这些信息拿到,并分配给这些不同程序的呢?

4、如何处理丢失的信息?

如果大家理解了这几个信息,那么网络编程的原理就能理解一大半。

用灵魂三连问来梳理网络编程这一块的知识

网络编程是什么呢?

网络编程就是对信息的发送到接收,把数据从一端通过网络传输到另一端的编程。

为什么要学网络编程?

a找工作需要;b互联网公司需要;c是面试的高频要

来看看多家大厂面在网络编程这一块的高频面试题

1、http协议,数据格式,常见响应码和返回码,HTTP1.0与2.0的区别、请求方法,存在哪些安全隐患,知道 https 是如何加密的、数字证书如何形成,什么是对称加密、非对称加密。http会话结束标志;Get与Post的区别。https建立连接的详细过程,哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解

2、TCP协议:三次握手、四次挥手、TCP/IP的数据链路层的交互;如何保证可靠传输、流量控制、拥塞控制。定时器,数据报文格式;socket编程的每个步骤的意义与参数代表。TCP的状态转换?TIME_WAIT状态的作用?

3、UDP:主要考察应用场景以及与TCP哪些不同;

4、select/poll/epoll的相关原理;select的各个参数作用?有哪些读/写事件?有没有更高效的IO模型?

5、send/recv有哪些出错情况?分别应该怎么处理?阻塞和非阻塞套接字的区别,send/recv的在阻塞和非阻塞下表现有啥不同,和同步/异步概念的区分?

6、网络框架对比和源码分析ACE/ICE/ZeroMQ/Mudo/Libevent/nginx

7、自己去设计网络请求框架,怎么做?

网络编程怎么学?

关于推荐书籍,有许多推荐《计算机网络:自顶向下》、《图解http》这两本。但我看了一下术语太多难理解,并不适合初学者。

我觉得有以下两本就够了,韩国人尹圣雨写的《TCP/IP网络编程》,都是通过举例子来串起知识点。写得非常好,大概一星期就看完了,接着读第二本就能非常深刻的理解。第二本推荐的是来自于游双的《Linux高性能服务器》;我就是看了这本书正式从嵌入式端转为服务器开发的。(文中所有推荐书籍已整理电子版,可于文末免费领取)

纸上学来终觉浅,绝知此事要躬行。挨个儿把里面的demo代码一个个敲完,收获一定会非常大。

二、操作系统

操作系统是什么?

结论如图所示:

强烈推荐一本宝藏书籍,叫做《操作系统哲学》。我个人建议不要学那些网上推荐得最多的《现代操作系统》、《操作系统—精髓与设计原理》,《深入理解计算机操作系统》,看过目录感觉就是枯燥无味。当我看了《操作系统哲学原理》之后,真是太佩服这个作者了,能够把如此生涩难懂的操作系统写得如此有趣。吐血推荐!

为什么要学操作系统?

还是为了面试和写程序,直接来看大厂关于操作系统的高频面试题:

怎么学操作系统?

书我已经推荐了,只有那一本。别的书类似于《深入理解计算机系统》,你们也别去看了,太枯燥我坚持了2天就放弃了。

把内容分解到极致,小到每个知识点,一行一行地去敲demo,自己慢慢理解。当经历了这个过程,能力自然而然就提升了,操作系统就像是编程里面的《易筋经》一样,主要是练内功,只能一步一个脚印。

高频面试题

1、进程/线程使用场景、内存分布、区别与联系

2、操作系统的内存对齐/字节对齐

3、处理器管理与存储管理

4、进程的通信方式/线程同步方式;linux常见的进程间通信方法有哪些,自己用过哪些?可举例。线程的同步方式有哪些?

5、僵尸进程是怎么产生的?怎么回收,请讲出回收僵进程的至少两种方法?如何查看进程是僵尸进程?程序退出后,Linux为什么不直接回收该僵尸进程?

6、fork及wait问题,什么作用?返回值代表什么意思?

7、linux应用程序中如何处理信号,有哪些常见信号,分别代表什么意思,怎么利用信号做进程间通讯?编写一个守护进程的方法?

三、数据库( MySQL OR Redis)

数据库是什么?能解决什么问题?

数据库是存放数据的仓库。在后台开发里面是必然要用的,数据库的种类太多了。也不必全部掌握,最典型的就是mysql和nosql里面的redis。

为什么要学数据库?

因为操作服务器,存储数据不可能全都存到内存里面,所以必须有存储的地方。能够共享数据,减轻冗余程度;集中控制数据;安全;还有数据恢复等等;在后台服务器开发里面,把MySQL学好,非常重要,但是不仅限于增删改查,也要知道一些原理;

怎么学习数据库?

最常见的mysql和redis。其他的比如mongodb,nginx,sqlite等了解就行了,没必要什么都去死磕。达到这种地步:1、会安装与配置;2 会用;3 清楚底层的原理;4 源码结构清晰;像redis的源码3.0版本也就三万多行;大致走一下脉络。理解设计思路就行了。但是像mysql就没必要去看源码了,大概知道索引是怎么实现的?各种锁,比如表锁,共享锁,行锁。还有就是了解一下数据库的备份原理。如何保证数据不丢失。数据库的事务的概念,一致性,还有就是mysql集群;mysql优化的话,大概背那几个常见的场景就行了。用得多自然就熟悉了。

推荐书籍:《深入浅出MYSQL》。看到电子书的截图目录就觉得棒棒哒。还有一本叫做《redis设计与实现》。时间不多的话,看Mysql就行了。毕竟还要花很多精力去干数据结构和算法嘛!

四、数据结构与算法

数据结构是什么?能解决什么问题?

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

为什么要学数据结构?

早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。

怎么学习数据结构?

1

记忆,记住算法思想

我觉得这个是数据结构与算法学习最基础的部分。

学完之后,你至少得能给人说明白,什么是”堆栈“,什么是”平衡二叉树“等等等吧。我之所以说”记住“,是希望这些能够形成长久记忆,存储到你的”硬盘“里,而不仅仅在学习的时候过了一遍你的”内存“。例如,学习哈夫曼树的时候。哈夫曼树的定义:WPL(带权路径长度)最小的二叉树;哈夫曼树的特点:(1)没有度为1的结点(2)n个叶子结点的哈夫曼树共有2n-1个结点(3)哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树。关于”数据结构“,需要记忆的内容也需要自己在其中慢慢领悟。

至于”记住算法思想“,举个例子,思考我们如何构造一个”哈夫曼树“。当然,在知道它的定义后,我们可以自己去设计一个算法。如果,自己可以想出来,恭喜你。如果自己没想到,再看到先人的解决办法后,不是仅仅“惊叹”一声,更要去记住它。我强调“记住”,并没有死记硬背的意思,而是,很多东西的理解和创新都是以记忆为前提的。

2

练习,用编程语言去实现某一数据结构上的算法;

因为人的精力有限,千万不要贪多,只需要搞定那些常见的就行了,那就足以去搞定90%以上的公司了,如果是算法岗位就当我没说,如果只是一个开发岗位,那就只需要掌握最常用、最基础的20个数据结构与算法,学习他们的:“来历”、“特点”、“适合解决什么问题”和“实际的应用场景”。

数据结构:数组、链表、栈、队列、散列表、二叉树‘、堆、跳表、图、Tire树
算法: 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法;

具体分为3个小步骤:
1. 边学边练,每周花 1~2 小时集中攻关一个数据结构和算法,全部写出来。
2. 多思考、多拓展、还有理解适合解决什么样的问题。
3. 自我激励,每次学习完做一篇学习笔记。

五、设计模式

设计模式是什么?能解决什么问题?

设计模式是在软件工程实践过程中,软件开发者们总结出的良好的编程方法,使用设计模式能够增加系统的健壮性,易修改性和可扩展性,当你进行开发的软件规模比较大的时候,良好的设计模式会给编程带来便利,让系统更加稳定。

为什么要学设计模式?

1. 写出高质量的代码,做出可高用的稳定的以扩展系统,秒杀搬砖代码。

2. 设计模式,是架构之路的基础,不懂设计模式的人,很难成为架构师。

3. 提升自身价值,不管是做开发还是设计,掌握设计模式,都能够凸显自己的技术水品。

4. 升职加薪

怎么学习设计模式?

1、记忆,记住典型案例

2、看一些开源代码,比如redis;

3、练习,用编程语言去实现一些设计模式;

最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 在这里插入图片描述在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 在这里插入图片描述

五、Python练习题

检查学习结果。 在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。 在这里插入图片描述在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

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

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

相关文章

利器 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

1080469 14.7 KB 上两篇文章介绍了自动遍历的测试需求、工具选择和 AppCrawler 的环境安装、启动及配置文件字段基本含义,这里将以实际案例更加细致的说明配置文件的用法和一些特殊场景的处理。 下面我们继续之前的例子,在雪球搜索框输入搜索内容后的页面…

CloudFlare系列--功能介绍与常用配置

原文网址:CloudFlare系列--功能与特性的介绍_IT利刃出鞘的博客-CSDN博客 简介 本文介绍CloudFlare的功能与常用的配置。 功能介绍 CloudFlare是世界最强的网络服务商。它可以提供如下服务: 防御DDoS攻击 世界最强防御DDos攻击的厂商。域名注册 世界最…

JavaWeb语法四:多线程案例

目录 1.单例模式 1.1:饿汉模式 1.2:懒汉模式 2.阻塞式队列 2.1:生产者消费者模型 2.2:阻塞队列的模拟实现 3.线程池 3.1:标准库中的线程池 3.2:模拟实现线程池 前言:前一篇我们讲了线程不安全的原因…

SAP UI5 里 FlexBox 的使用方法

ScrollContainer 的使用方式: ScrollContainer 是一个控件,可以在有限的屏幕区域内显示任意内容,并提供滚动以使所有内容都可访问。注意,为了避免影响用户使用体验,不要嵌套沿相同方向滚动的滚动区域。例如&#xff…

【LaTex】基础语法框架快速入门教程——Tex live+TexStudio简要安装及使用教程

0. 引言 LaTeX对于论文排版有着巨大的便利,并且对于参考文献的引用也十分方便,不会出现使用word引用参考文献一旦更改文献引用顺序,就必须全部改编号的情况。这里记录一下如何从0开始学习使用LaTeX书写论文。 1. 软件安装&环境配置 1.…

Qt中实例化一个函数变量时加不加括号的区别,以及括号中的this的使用

一、设计一个测试小程序 废话不多说,直接上代码。 main.h函数就不多说了,没改动。直接上mainwindow.h,也没改动。看mainwindow.cpp的内容。 #include "mainwindow.h" #include "ui_mainwindow.h" #include "test.…

机器学习算法基础——KNN算法

KNN (K-Nearest Neighbor)–K近邻分类算法 • 为了判断未知实例的类别,以所有已知类别的实例作为参照选择参数K • 计算未知实例与所有已知实例的距离 • 选择最近K个已知实例 • 根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻…

Zerobot僵尸网络出现了新的漏洞利用和功能

©网络研究院 Zerobot DDoS僵尸网络已经获得了重大更新,扩展了其针对更多互联网连接设备和扩展网络的能力。 微软威胁情报中心 (MSTIC)正在以DEV-1061的名称跟踪持续的威胁,名称为未知、新兴或发展中的活动群集。 本月早些时候,Fort…

2022年山东省职业院校技能大赛中职组“网络安全”赛项规程

2022年山东省职业院校技能大赛中职组“网络安全”赛项规程一、赛项名称赛项名称:网络安全英文名称:Cyber Security赛项组别:中职组赛项类别:电子与信息类二、竞赛目的网络空间已经成为陆、海、空、天之后的第五大主权领域空间,习总…

SpringCloud 网关组件 Zuul-1.0 原理深度解析

为什么要使用网关? 在当下流行的微服务架构中,面对多端应用时我们往往会做前后端分离:如前端分成 APP 端、网页端、小程序端等,使用 Vue 等流行的前端框架交给前端团队负责实现;后端拆分成若干微服务,分别…

k8s使用glusterfs(静态供给、动态供给)、glusterfs的安装与使用

目录前言主机准备配置主机名、关闭防火墙、关闭selinux挂载磁盘安装glusterfs服务端glusterfs的端口分布式集群的结构组成glusterfs集群创建存储卷启动卷k8s使用glusterfs作为后端存储(静态供给glusterfs存储)恢复初始化环境安装Heketi 服务(…

如何快速读懂开源代码?

文章目录**RUN起来****调试****把控关键数据结构和函数****从小的开始****关注一个模块****工具****一、阅读开源代码存在的一些误区**二、阅读代码的心态**三、阅读源码与**辅助材料**四、如何阅读开源代码****《gdb 高级调试实战教程》电子书下载链接:**1 下载 Ng…

ASP.NET开源版MES加工装配模拟系统源码/WinForm工厂加工装配系统源码/流程工序管理

一、源码描述 本系统用户大学机械科上位机加工装配模拟实验,目前正常用于实验当中。环境:VS2010(C# .NET4.0,多层结构)、sqlserver2008 r2 ;Winform;使用到RFID读写器(设备是可以变更的,修改RFID.Library项目的…

Mycat2(一)简介、分库分表概念

文章目录mycat是什么;为什么要用;mycat的作用原理分库分表的意义数据库优化的层次:数据切分的方式,带来的问题和解决方案分库分表带来的问题mycat的特性与详细配置含义mycat2与mycat1.6区别mycat2映射模型多数据源解决方案mycat核…

JavaScript控制元素(标签)的显示与隐藏

使用JavaScript有多种方式来隐藏元素: 方式一、使用HTML 的hidden 属性,隐藏后不占用原来的位置 hidden 属性是一个 Boolean 类型的值,如果想要隐藏元素,就将值设置为 true,否则就将值设置为false 【HTML hidden 属性…

【STM32+cubemx】0030 HAL库开发:DDS芯片AD9833实现简单的波形发生器

大家好,我是学电子的小白白,今天带大家了解一款波形发生器芯片——AD9833。 AD9833是AD公司出品的一款DDS波形发生器,能够产生正弦波、三角波和方波输出。 1)什么是DDS 通俗来讲,DDS是一种把波形预先存储在芯片内部的…

H5对接NSS主扫遇到的一些问题

需要对接以下这些钱包: WXPAY(微信)ALIPAY(支付宝)LINEPAY(linePay)PAY_PAY (PayPay)RAKUTEN_PAY(乐天)MER_PAY(MerPay)AU_PAY(auPay)DOCOMO_PAY(Dpay)判断钱包类型 这…

注册中心Nacos

Nacos是Spring Cloud Alibaba提供的一个软件 这个软件主要具有注册中心和配置中心(课程最后讲解)的功能 我们先学习它注册中心的功能 微服务中所有项目都必须注册到注册中心才能成为微服务的一部分 注册中心和企业中的人力资源管理部门有相似 当前微服务项目中所有的模块,在…

用户购车旅程转变下,深度运营中的难点痛点如何突破?

在数字互联的营销环境下,消费者的购车旅程和用户行为发生了极大的改变,线上决策比重逐渐增强,到店决策周期越来越短,消费者可以在线完成70%-80%的车型甄选和决策。在这种环境下,未来如何实现更高效的用户运营和快速的销…

Python基础(十八):学员管理系统应用

文章目录 学员管理系统应用 一、系统简介 二、步骤分析 三、需求实现 1、显示功能界面 2、用户输入序号,选择功能 3、根据用户选择,执行不同的功能 4、定义不同功能的函数 学员管理系统应用 一、系统简介 需求:进入系统显示系统功能…