在小组讨论时被问到 “你能解释这个代码逻辑吗” ——突然意识到,程序员最难的Bug是“说不清楚”。
以前一直认为,程序员不是会技术就行了吗?后来了解到程序员还需要良好的理解能力、沟通能力和语言组织、表达能力,他们在工作中经常需要和同事交流协作,理解产品经理和项目经理的需求描述,向领导汇报工作情况等。对于一个嘴笨社恐人士来说,这真的是一场考验。并且我听一位老师说 “互联网是‘e人’的主战场” ,这句话说对了一半,‘e人’ 可能在沟通和表达上有天然的优势,‘i人’ 的表达能力也可以很优秀,甚至优于天生的 ‘e人’
我属于是埋头苦学的类型,语言表达能力比较弱,但幸运的是我才大一,现在意识到问题还不晚,剩下的交给行动。好,说干就干!从今天开始我会和我的好朋友,发语音用自己的话讲一个知识点,这样做既能锻炼表达能力,也是对知识点的巩固。
第一天
我:
进程和线程的概念及区别(44s+35s)
CPU是计算机的大脑,它负责执行使用者给出的各种指令和任务,这些任务就叫做进程。一个进程可以包含一个或者多个线程。这里可以看出,进程是一个比线程更大的单位,所以创建和销毁进程的开销要比创建和销毁线程的开销要大得多。CPU执行这些进程的时候,是需要消耗内存和文件这些资源的,这些资源由操作系统来分配。进程是操作系统分配资源的一个基本单位吧,每个进程都会被分配到一定的资源,然后一个进程里面的若干个线程就共享这套资源。
friend:
普通for循环和foreach循环的区别(36s)
普通for循环和foreach循环,它们都能完整地遍历集合或者数组,但它们的本质底层不同。普通for循环是依靠索引下标访问,然后可以自由地控制便利的范围以及修改元素。而for each是基于迭代器的,他只能从头到尾遍历,然后遍历的过程中它不能增删元素。
找不足
(以下总结为自己、friend、豆包、deepseek的评价整合)
有些地方卡顿(分两段也是因为卡太久了),语句衔接不连贯,还有点啰嗦
讲了进程包含线程,但把最重要的线程的核心定义 “线程是CPU调度的基本单位” 给漏了
进程和线程的核心区别未提及——进程之间资源独立,互不影响(一个崩溃不影响另一个),线程共享资源,一个线程崩溃可能导致整个进程崩溃
语句通俗但缺乏严谨性,比如 “进程就是任务” 的表述不严谨,正确表达是 “进程是承载任务的载体” ,它是运行中的程序实例
错误表述:CPU不直接消耗资源,是进程在消耗
还有最致命的一点,带有 “吧” 字,显得不够自信,对知识点掌握不扎实,这要是面试,会给面试官留下不好的印象。
friend说不会读Iterator,准确来说是读音不标准(俺也一样),所以没有指明是哪个迭代器
语言简炼但有一处漏洞:数组没有迭代器,foreach编译直接转为下标普通for,而集合实现Iterable接口,foreach底层依赖迭代器Iterator
改良版
(重新组织语言)
CPU是计算机的大脑,它负责执行各种指令。进程是运行中的程序实例,也是操作系统分配资源的基本单位,线程是CPU调度的基本单位。一个进程可以包含多个线程,进程间资源独立,互不影响,但是一个进程中的线程之间,他们共享该进程中的资源,一个线程崩溃可能导致整个进程都崩溃,由于进程是比线程更大的单元,所以创建和销毁进程的开销比较大,创建和销毁线程的开销小。
普通for循环和foreach循环都能完整地遍历数组和集合,但它们的底层实现与使用限制存在本质区别。普通For循环依靠下标索引访问元素,灵活性很强,可以自定义便利范围,实现倒序或间隔便利,也能通过下标直接修改元素,foreach属于Java的语法糖,它的底层逻辑分两种情况,遍历集合时会基于iterator迭代器进行遍历,只能从头到尾顺序读取全部元素,遍历图中执行增删操作会抛出并发修改异常。
当数组本身没有原生迭代器,使用foreach去遍历数组时,编译器会自动将代码转化为下标循环。此外,foreach是无法获取元素下标的,它只适合仅需读取数据的场景代码,书写起来会更加简洁,而普通for循环是适配所有需要灵活控制遍历逻辑,或者修改容器元素的场景。
第一次试着把知识点讲出来,感觉跟写博客分享知识有很大的区别,博客我可以想好一句话再写,写完还可以修改,但在60s语音里需要的是 “即时表达” 的能力,这对我平时与人沟通交流也有好处
并且通过复盘整理,我对知识点的掌握也深了不少,降低了复习的成本