极客时间-《左耳听风》

news2025/1/4 19:50:36

技术基础

02 程序员如何用技术变现(下)

在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式?”

1、从一个一个小成功做起

2、关注有价值的东西

        关注市场需求

        关注技术趋势

3、找到能体现价值的地方

4、动手能力很重要

        多动手,敲代码,写文档

5、关注技术付费点

        帮人挣钱或者帮人省钱

6、提升自己的能力和经历

7、找到有价值的信息源

8、输出观点和价值观

        表达自己的想法

9、优质朋友圈

        会挣钱的人一定是会投资的人。我一直认为,最宝贵的财富并不是钱,而是你的时间,时间比钱更宝贵,因为钱你不用还在那里,而时间你不用就浪费掉了。你把你的时间投资在哪些地方,就意味着你未来会走什么样的路。所以,利用好你的时间,投到一些有意义的地方吧。

04 从Equifax信息泄露看数据安全

密码散列:公认安全的算法(如SHA-2 256) + 安全随机数

MD5能够人为找到碰撞,安全性不如SHA-2 256

05 何为技术领导力

技术领导力
  • 尊重技术,追求核心基础技术
  • 追逐自动化的高效率的工具和技术,同时避免无效率的组织架构和管理
  • 解放生产力,追逐人效的提高
  • 开发抽象和高质量的可以重用的技术组件
  • 坚持高于社会主流的技术标准的要求
作为一个软件工程师,怎么才算拥有“技术领导力”呢?
  • 能够发现问题能够发现现有方案的问题。
  • 能够提供解决问题的思路和方案,并能够比较这些方案的优缺点
  • 能够做出正确的技术决定。用什么样的技术、什么解决方案、怎样实现来完成一个项目。
  • 能够用更优雅、更简单、更容易的方式来解决问题。
  • 能够提高代码或软件的扩展性、重用性和可维护性。
  • 能够用正确的方式管理团队。所谓正确的方式,一方面是,让正确的人做正确的事,并发挥每个人的潜力;另一方面是,可以提高团队的生产力和人效,找到最有价值的需求,用最少的成本实现之。并且,可以不断地提高自身和团队的标准。
  • 创新能力。能够使用新的方法新的方式解决问题,追逐新的工具和技术。
如何拥有技术领导力?
  • 扎实的基础技术
  • 非同一般的学习能力
  • 坚持做正确的事
  • 不断提高对自己的要求标准

07 推荐阅读:每个程序员都应该知道的知识

推荐的书
  • 《代码大全》 虽然这本书有点过时了,而且厚到可以垫显示器,但是这绝对是一本经典的书。
  • 《程序员修练之道》 这本书也是相当经典,我觉得就是你的指路明灯。
  • 《计算机的构造和解释》 经典中的经典,必读。
  • 《算法导论》 美国的本科生教材,这本书应该也是中国计算机学生的教材。
  • 《设计模式》 这本书是面向对象设计的经典书籍。
  • 《重构》 代码坏味道和相应代码的最佳实践。
  • 《人月神话》 这本书可能也有点过时了,但还是经典书。
  • 《代码整洁之道》 细节之处的效率,完美和简单。
  • 《Effective C++》/《More Effective C++》 C++ 中两本经典得不能再经典的书。也许你觉得 C++ 复杂,但这两本书中带来对代码稳定性的探索方式让人受益,因为这种思维方式同样可以用在其它地方。以至于各种模仿者,比如《Effective Java》也是一本经典书。
  • 《Unix 编程艺术》《Unix 高级环境编程》也是相关的经典。
每个搞计算机专业的学生应有的知识

《What every computer science major should know》,每个搞计算机专业的学生应有的知识。中文版:每个计算机专业学生应有的知识(翻译自:What every computer science major should know?) - 刮杂笔记

Linkedln高效的代码复查技巧

《LinkedIn’s Tips for Highly Effective Code Review》,LinkedIn 的高效代码复查技巧

《从Code Review谈如何做技术》左大哥自己写的

08 Go语言,Docker和新技术

如何看一个新技术能不能发展起来
  • 有没有一个比较好的社区
  • 有没有一个工业化的标准
  • 有没有一个或多个杀手级应用
  • 学习难度是否低,上手是否快
  • 有没有一个不错的提高开发效率的开发框架
  • 有没有一个或多个巨型的技术公司作为后盾
  • 有没有解决软件开发中的痛点

10 如何成为一个大家愿意追随的Leader?

Leader和Boss的不同

 

 如何成为众人愿意追随的Leader
  • 具备技术领导力
  • 赢得他人的信任

        对于信任来说,并不完全是别人相信你能做到某个事,还有别人愿意向你打开心扉,和你说他心里面最柔软的东西。而后者才是真正的信任

  • 开放的心态+倾向性的价值观
  • Lead by Example

         要做一个有人愿意跟随的技术 Leader,你需要终身写代码,也就是所谓的 ABC – Always Be Coding。这样,你会得到更多的实际经验,能够非常明白一个技术方案的优缺点,实现复杂度,知道什么是 Best Practice,你的方案才会更具执行力和实践性。当有了执行力,你就会获得更多的成就,而这些成就反过来会让更多的人来跟随你。

  • 保持热情和冲劲

        真正的热情和冲劲是,正视问题,正视不足,正视错误,从中进行反思和总结得到更好的解决方案,不怕困难,迎难而上

  • 能够抓住重点,看透事物的本质
  • 描绘令人激动的方向,提供令人向往的环境
  • 甘当铺路石,为他人创造机会

11 程序中的错误处理:错误返回码和异常捕捉

资源清理

程序出错时需要对已分配的一些资源做清理

  • go语言中的defer关键字可用做此处理
func Close(c io.Closer) {
  err := c.Close()
  if err != nil {
    log.Fatal(err)
  }
}

func main() {
  r, err := Open("a")
  if err != nil {
    log.Fatalf("error opening 'a'\n")
  }
  defer Close(r) // 使用defer关键字在函数退出时关闭文件。

  r, err = Open("b")
  if err != nil {
    log.Fatalf("error opening 'b'\n")
  }
  defer Close(r) // 使用defer关键字在函数退出时关闭文件。
}
  • C++ 的RALL机制
//首先,先声明一个RAII类,注意其中的构造函数和析构函数
class LockGuard {
public:
  LockGuard(std::mutex &m):_m(m) { m.lock(); }
  ~LockGuard() { m. unlock(); }
private:
  std::mutex& _m;
}


//然后,我们来看一下,怎样使用的
void good()
{
  LockGuard lg(m);           // RAII类:构造时,互斥量请求加锁
  f();                             // 若f()抛异常,则释放互斥
  if(!everything_ok()) return;     // 提早返回,LockGuard析构时,互斥量被释放
}                                    // 若good()正常返回,则释放互斥

异常捕捉处理

try - catch - finally编程模式

try {
  ... // 正常的业务代码
} catch (Exception1 e) {
  ... // 处理异常 Exception1 的代码
} catch (Exception2 e) {
  ... // 处理异常 Exception2 的代码
} finally {
  ... // 资源清理的代码
}

12 程序中的错误处理:异步编程以及我的最佳实践

        异步编程时,因为被调用的函数被放到了另外一个线程里运行,将导致:无法使用返回码、无法使用抛异常的方式,所以异步编程中常用callback方式来处理错误。 

JavaScript异步编程的错误处理

        1)Promise模式

doSomething()
.then(result => doSomethingElse(result))
.then(newResult => doThirdThing(newResult))
.then(finalResult => {
  console.log(`Got the final result: ${finalResult}`);
}).catch(failureCallback);

        上面代码中的 then() 和 catch() 方法就是 Promise 对象的方法,then()方法可以把各个异步的函数给串联起来,而catch() 方法则是出错的处理。

        2)使用async/await这两个关键字来取代 Promise 对象

async function foo() {
  try {
    let result = await doSomething();
    let newResult = await doSomethingElse(result);
    let finalResult = await doThirdThing(newResult);
    console.log(`Got the final result: ${finalResult}`);
  } catch(error) {
    failureCallback(error);
  }
}

        如果在函数定义之前使用了 async 关键字,就可以在函数内使用 await。 当在 await 某个 Promise 时,函数暂停执行,直至该 Promise 产生结果,并且暂停不会阻塞主线程。 如果 Promise resolve,则会返回值。 如果 Promise reject,则会抛出拒绝的值。

Java 异步编程的 Promise 模式

        在Java中,在JDK1.8中引入了类似JS的玩法 - CompletableFuture,这个类提供了大量的异步编程中Promise的各种方式。

CompletableFuture.supplyAsync(Integer::parseInt) //输入: "ILLEGAL"
           .thenApply(r -> r * 2 * Math.PI)
           .thenApply(s -> "apply>> " + s)
           .thenAccept(this::notify)
           .exceptionally(ex -> "Error: " + ex.getMessage());

        supplyAsync()表示执行一个异步方法,而thenApply()表示执行成功后再串联另外一个异步方法,thenAccept()可以处理最终结果,exceptionally()可以捕捉异常。

CompletableFuture.supplyAsync(Integer::parseInt) // 输入: "ILLEGAL"
         .thenApply(r -> r * 2 * Math.PI)
         .thenApply(s -> "apply>> " + s)
         .handle((result, ex) -> {
           if (result != null) {
             return result;
           } else {
             return "Error handling: " + ex.getMessage();
           }
         });

        handle()方法可以用来处理最终的结果,其中包含了异步函数中的错误处理。

Go语言的Promise

        Github上搜Go语言的Promise的相关代码库

错误处理的最佳实践
  1. 统一分类的错误字典
  2. 同类错误的定义最好是可以拓展的
  3. 定义错误的严重程度(fatal、error、waring、info、debug)
  4. 错误日志的输出最好使用错误码,而不是错误信息
  5. 忽略错误的时候也要有日志
  6. 对于同一个地方不停地报错,可以打印错误信息+次数
  7. 不要用错误处理逻辑来处理业务逻辑(异常捕捉代码就用来处理异常)
  8. 对于同类的错误处理,用一样的模式
  9. 尽可能在错误发生的地方处理错误
  10. 向上尽可能地返回原始的错误
  11. 处理错误时,总是要清理已分配的资源(使用 RAII 技术,或是try-catch-finally,或是 Go 的 defer 都可以容易地做到
  12. 不推荐在循环体里处理错误(最好把循环体放在try语句块内)
  13. 不要把大量的代码都放在一个try语句块内
  14. 为你的错误定义提供清楚的文档以及每种错误的代码示例
  15. 对于异步的方式,推荐使用 Promise 模式处理错误
  16. 对于分布式的系统,推荐使用 APM 相关的软件。尤其是使用 Zipkin 这样的服务调用跟踪的分析来关联错误

15 时间管理:同扭曲时间的事儿抗争

面对做不到或时间不够的需求时,给回三个选择:

        1)可以加班完成,但是不保证质量,有BUG得认;

        2)可以加班完成,还能保证质量,但是没办法完成这么多需求,是否可以减少些需求?

        3)可以保质保量地完成所有需求,但需要多2周时间

16 时间管理:如何利用好自己的时间?

投资自己的时间

        1)花时间学习基础知识,花时间读文档。学好基础知识。

        2)花时间在解放自己生产力的事上。

                在自动化、可配置、可重用、可扩展上要多花时间。对于软件开发来说,能自动化的事,就算多花点时间也要自动化,因为下次就不用花时间了。让自己的软件模块可以更灵活地配置和扩展。

        3)花时间在让自己成长的事上。

                能让自己有更大的视野,能让自己有更多可能性的事情上

        4)花时间在建立高效的环境上。

规划自己的时间
  • 定好优先级
  • 最短作业优先
  • 想清楚再做
  • 关注长期利益规划
用好自己的时间
  • 做事要专注
  • 形成习惯
  • 形成正反馈
  • 反思和举一反三

17 故障处理最佳实践:应对故障

发生故障时,通常会有以下几种手段来恢复系统:

        回滚、重启和限流、降级、紧急更新

出故障时最重要的不是debug故障,而是尽可能地减少故障的影响范围,并尽可能快地修复问题。

应对故障的准备工作

       1) 建立以用户功能为索引的服务和资源的全视图。用一个系统来记录前端用户操作界面和后端服务,以及服务使用到的硬件资源之间的关联关系。以用户端的功能来做索引,然后,把后端服务、服务的调用关系,以及服务使用到资源都关联起来做成一个视图。

        2)为地图中的各个服务指定关键指标,以及一套运维流程和工具,包括应急方案。以用户的功能为索引,为每个用户服务都指定一个故障的检测、处理和恢复手册,以及相关的检测、查错或是恢复的运维工具。

        3)设定故障的等级。还要设定不同故障等级的处理方式。

        4)故障演练。

       5) 使用灰度发布系统。灰度发布可减少线上故障影响的范围。

自动地图生成

        耗子哥推荐,自动地图生成一般用APM式的系统。开源的可以看看zipkin。APM对于微服务架构生成的图元素会比较复杂。

        另外,开源skywalking 国人做的Apache的顶级项目,特点无侵入 还有pinpont ,韩国人开发的。

 

高效学习


96 高效学习:端正学习态度

学习3个步骤

  • 知识采集
  • 知识缝合
  • 技能转换

学习的观点

  • 学习不仅仅是为了找到答案,而更是为了找到方法
  • 学习不仅仅是为了知道,而更是为了思考和理解

        所有的技术都是为了解决某个问题而出现,因此在学习技术的时候,需要思考几个问题: 1. 问题的背景是什么?这个技术是为了解决什么问题而出现的 2. 这个技术是如何解决问题的?还有什么其他技术可以解决这个问题?为什么这里用这个技术?

  • 学习不仅仅是为了开拓眼界,而更是为了找到自己的未知,为了了解自己
  • 学习不仅仅是为了成长,而更是为了改变自己,改变自己的思考方式,改变自己的思维方式,改变自己与生俱来的那些垃圾和低效的算法

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

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

相关文章

【报错】git push --set-upstream origin XXXX重名

您在尝试将分支推送到远程仓库时遇到了错误。错误信息表明,由于已经存在名为 refs/heads/xingfan/demo 的文件夹,Git 无法创建分支 refs/heads/xingfan。 要解决此问题,您可以尝试重命名本地分支,然后将其推送到远程仓库。以下是…

冠达管理:被举牌的股票好不好?

所谓“举牌”,就是指通过买入目标公司5%以上的股份并自动公告,向商场宣示自己对公司股权的控制权和出资意向。那么,对于这些被举牌的公司,其股票好不好呢? 1. 举牌背面的原因 首先,咱们需求关注举牌背面的…

图数据库_Neo4j和SpringBoot整合使用_创建节点_删除节点_创建关系_使用CQL操作图谱---Neo4j图数据库工作笔记0009

首先需要引入依赖 springboot提供了一个spring data neo4j来操作 neo4j 可以看到它的架构 这个是下载下来的jar包来看看 有很多cypher对吧 可以看到就是通过封装的驱动来操作graph database 然后开始弄一下 首先添加依赖

RunnerGo链接数据库功能详解

我们在做性能测试或者场景测试时往往需要从数据库中获取一些真实的系统数据让我们配置的场景更加贴合实际。而RunnerGo也是在最近的大版本更新中推出连接数据库功能,本篇文章也给大家讲解一下具体的操作方法和实际应用场景。 配置数据库 首先进入RunnerGo页面&…

​怎么将物理机硬盘克隆到虚拟机?

​用户案例:克隆后的硬盘是否能用于虚拟机? “我有一台安装了Windows10的计算机,现在正在尝试克隆电脑上的硬盘。然后我想把这个硬盘放在自己的虚拟机中使用,这样我就可以从克隆的硬盘中启动相同的Windows10系统。” …

做好以下几点,可以让我们延长周末体验感,好好放松!!!

工作以后常常容易感到疲于奔命,让我们找到适合自己方式,来让我们度过一个充实放松的周末! 方向一:分享你周末的时间规划 我们可以把每个月当做一个周期,制定一个简单的计划,如:第一周,锻炼身体…

手写代码-前端面试

GitHub:手写代码集合

windows任务计划程序运行bat文件,报错脚本错误:系统找不到指定的文件

先看错误: 我用windows任务计划程序运行调用python的程序,就写了一个bat,我想让他不显示命令框,所以我就加了上面可以隐藏命令框的,然后我用任务调用的时候就报错了 echo offif "%1" "h" goto b…

jenkins使用

安装插件 maven publish over ssh publish over ssh 会将打包后的jar包,通过ssh推送到指定的服务器上,,在jenkins中设置,推送后脚本,实现自动部署jar包,, 装了这个插件之后,可以在项…

一些封装电商API接口的常见步骤

电商API接口的封装是指将电商平台的功能和数据通过API接口的形式提供给开发者来调用。下面是一些封装电商API接口的常见步骤: 1. 确定需求:首先需要明确要封装的电商API接口的功能和数据,包括用户登录、商品搜索、订单管理等。Taobao。拼多多…

高并发内存池(threadcache)[1]

高并发内存池 分层处理 thread cache 定义一个公共的FreeList管理切分的小空间 static void*& NextObj(void* obj) {return *(void**)obj; }//管理切分好的小对象的自由链表 class FreeList { public:void Push(void* obj){assert(obj);//头插//*(void**)obj _freeLis…

RabbitMq-3入门案例

rabbitmq入门 1.生产者&#xff08;服务提供方&#xff09; //依赖<dependencies> <!-- rabbitmq客户端依赖--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0<…

骨传导耳机会伤耳膜吗?骨传导耳机有什么优缺点一文教你读懂

骨传导耳机会伤耳膜吗? 答案是不会&#xff01;因为骨传导耳机传声完全不会经过耳膜&#xff0c;说到这里就不得不讲一下骨传导的发声原理了&#xff0c;正常情况下&#xff0c;声音传声主要分为空气传导、固体传导和液体传导&#xff0c;物理大家都学过这里就不多赘述了。 我…

用MASM32编程更新sysInfo的一些收获

近日正在更新用MASM32编写的sysInfo&#xff0c;通过WMI访问Win32_UserCount来获取系统用户帐号信息&#xff0c;访问Win32_Product来获取系统中安装的产品信息。 在进行更新过程中&#xff0c;有一些新的收获跟大家分享。 一、HTMLJavaScript构建C类代码一键转换MASM32代码平…

中科方德4.0服务器 默认自动分区,扩容根分区方法

先看分区情况是否为非LVM的ext4&#xff0c;方德默认自动分配即是此种分区&#xff1b;外部添加磁盘空间&#xff0c;虚拟机或者物理机一样&#xff1b;图形化扩展到逻辑分区&#xff0c;如图中所示的扩展分区&#xff1b;home分区扩展&#xff1b;home分区尾部留出新home分区&…

iOS 17 正式版预计 9 月中下旬发布,部分新功能延后推出

苹果公司预计将在 9 月中下旬推出 iOS 17 正式版&#xff0c;iPhone XS 及更新的机型可免费更新。这次更新包含了许多新功能&#xff0c;但是根据苹果公司的网站显示&#xff0c;并不是所有的功能都会立即可用。苹果表示有一些功能“将在今年晚些时候推出”&#xff0c;比如&am…

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…

基线与基线检查

目录 一、什么是基线 二、安全基线与配置核查 三、常见安全配置问题 四、配置检查目的 五、配置检查标准 六、基线检查标准 七、安全基线与漏扫的异同 相同点 不同点 八、安全基线体系 九、安全配置核查关注什么 口令策略 文件权限 用户账户 系统服务 认证授权 网络通…

【Docker】Docker安装 MySQL 8.0,简洁版-快速安装使用

今天&#xff0c;使用docker安装mysql数据库进行一个测试&#xff0c;结果网上找了一篇文章&#xff0c;然后。。。。坑死我… 特总结本篇安装教程&#xff0c;主打一个废话不多说&#xff01; 坑&#xff1a;安装成功&#xff0c;客户端工具连接不上数据库》。。。 正文&…

复习3-5天【80天学习完《深入理解计算机系统》】第七天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…