这五天从集合一路学到多线程,能明显感觉到难度在爬坡。前面几天都在内存里折腾数据容器,后面突然跳到硬盘读写,最后又跑到操作系统线程调度上,抽象程度越来越高,每往前学一节,前一节的底子就变得更重要。

day11 集合,最直观的感受就是“动态数组”确实方便,不用像普通数组那样先把长度定死。但问题也来得直接:方法太多了,Add、RemoveAt、Insert、IndexOf……脱离笔记写代码时常把参数顺序搞反。更烦的是ArrayList什么都能往里存,取出来得强转,转错了就是运行时异常,自己写筛选逻辑的时候经常心里没底。

day12 泛型算是救星,List一写,类型就锁死了,不再担心装箱拆箱和类型转换。但我只能依葫芦画瓢地用现成的泛型集合,让自己封装泛型类或泛型方法就完全无从下手。where约束那几个条件也是死记硬背,不明白底层为什么要这么限制,尖括号偶尔还会写成圆括号,纯属手生。

day13 字典,键值对查找确实快,但踩坑点很固定——老是忘记先判断ContainsKey就直接Add,重复键一跑就崩。头疼的是实际场景里经常犹豫:这数据到底该用List还是Dictionary,判断依据不够清晰。

day14 IO文件操作,第一次接触持久化存储。绝对路径相对路径搞不清,最常遇见的报错就是“找不到文件”。流打开后忘记Close,文件被占着删不掉,后来虽然知道用using,但只会机械套。字节流和字符流到底用哪个,处理中文偶尔出乱码,异常捕获(文件不存在、权限不足)也总是事后才想起来补。

day15 多线程难度直接跳了一档。宏观并发微观串行的概念全靠控制台交替打印来体会,一开始不知道Join,主线程嗖一下就结束了,输出顺序完全不对题。线程启动、Sleep这些API记得零散,共享变量的数据安全问题只停留在概念上,lock加锁是照抄示例的,换一个场景就不确定该锁哪里。每次运行结果顺序随机,搞不清是正常并发还是自己逻辑有bug。

贯穿始终的几个毛病:每个模块API都很多,跟着示例能跑,自己从头写就卡壳;模板依赖太强,给了框架能改内部逻辑,但让我自己搭骨架就没思路;知识点环环相扣,泛型和集合没吃透,字典就跟着别扭,IO释放资源那种“用完就收”的思维没建立,多线程里的锁和资源回收就更难理解;很多底层过程看不见(比如集合扩容、磁盘读写、线程调度),只能靠运行现象反推,总感觉隔着一层。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐