两种不同的编程学习观点,深度还是广度?
来源:互联网 发布:cp linux 文件夹 编辑:程序博客网 时间:2024/05/16 18:48
深度:
链接:https://www.zhihu.com/question/31116593/answer/200716881
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我记得我大学毕业简历上写的是精通java,工作5年后写的是熟悉java,现在10年+后写的是了解java。
你才一年。。。
(这真不是梗,你学的越多,就会知道自己不懂的越多,自然不敢说精通了。大学毕业写精通是为了找工作大家都这样写。。我们当时是学过就叫精通,用过就写熟悉,听过就写了解,:D)
作为过来人我经历过感觉什么都懂,不知道何去何从的阶段。现在想想其实根本是似懂非懂。后面恶补基础,多简单的例子都亲自测试,思考实现原理,查看对应的jdk代码,半年后感觉到质的变化,才觉得java真有意思!
了解得越多,发现自己不懂的越多,这句话绝对是真理!
大胆讲一句,楼主工作一年,很大可能连wait,notify怎么样用都不懂?不服?用wait,notify写一个blockqueue试试?
==========================================================
补充一些有用的信息,说一下我是怎么样学习的,就说一点数据结构的:
一开始我们就学习list和map。先说list,最基本有Arraylist和LinkedList,就以他们两为例分析,看他们的父类和实现的接口。ArrayList继承AbstractList,LinkedList继承AbstractSequentialList,AbstractSequentialList继承AbstractList,查看代码AbstractSequentialList没有新增方法,那么Arraylist和LinkedList都继承AbstractList,可以把他们当成有相同的特性。
接下来查看AbstractList,他实现了List接口,没有新增方法,那么重点查看List的方法即可。每一个方法都要看一遍API说明,用一遍测试一遍。add,remove这些没有什么好看的,重点留意你不熟悉的方法。
接下来看他们实现的接口,相同的Cloneable, Serializable看一下有哪些方法即可,重点看不同的,Arraylist实现了RandomAccess(其实里面啥方法也没有,应该说是只是一个标志),LinkedList实现了Deque。在看每一个接口的说明,RandomAccess说明可以用get方法访问,性能很快,你如果是一个LinkedList用get你就会发现慢的吓人;Deque说明实现了双向队列,在查看Dueue的各个方法了解他所有的特性。
接下来看构造函数的参数,可以看出ArrayList有个int类型的initialCapacity参数,LinkedList没有,思考一下为什么。接下来你会发现有数组的数据结构的构造函数都有一个容量的参数(如HashMap),你会发现他的用处,再深究下去会发现ArrayList会存在扩容这个概念。。。
到了这步你应该有自己的总结:
a。ArrayList是用数组实现的,需要初始化容量,容量不够的时候会扩容,扩容会把数组copy一遍比较耗费性能,大数据量的时应该尽量避免。
b。ArrayList可以用get方法随机访问,性能还能很快,LinkedList用get方法会比较慢,大数据量应该避免。
c。LinkedList实现了双向队列,可以非常方便的在头尾增加和删除数据。
d。一边遍历一边修改的时候需要使用listIterator,不要傻傻的搞2个List。
到了这步算是入门了,我才敢说自己入门了。
我有时候面试会问,list怎么样删除指定的数据了?如,存放数字的list,把偶数删除掉。很简单对吧,你写代码试试?你要是知道List接口有个可以修改的listIterator,你就会知道这么常见的场景应该用这个迭代器解决。
面试的时候最讨厌有点人自以为是:“这个我不清楚,但我上网查一下就知道了!”Are you kidding?你都不知道有这个东西,你会去查?
说这么多,只是希望大家记住,最简单的基础才是最重要的,我不希望我接下来在面试的时候,问map有哪些map,只能回答出我大学毕业的时候就知道的hashmap和hashtable。。。
广度:
- 两种不同的编程学习观点,深度还是广度?
- 机器学习(十二):推荐系统的两种观点
- 要广度还是要深度?
- 深度优先还是广度优先
- 技术发展要广度还是深度?
- C++ 编程的“深度”与“广度”
- C++ 编程的“深度”与“广度”
- C++ 编程的“深度”与“广度”
- 图的两种遍历方式--深度与广度优先遍历
- 观点的不同
- 销售员和程序员的两种观点
- 销售员和程序员的两种观点
- 两种不同的学习策略
- 用投资的观点学习编程
- C++ 编程的“深度”与“广度”(转)
- 图的递归非递归深度优先搜索和广度优先搜索,两种最小生成树算法
- 图的基本概念表示方法以及两种搜索方式——深度优先遍历和广度优先遍历
- 关于学习的专注性->知识的广度和深度
- “你若未来”我怎敢老去
- Linux socket编程,对套接字进行封装
- json和jsonp的区别和各种用法
- ansible常用命令
- Centos7下启动tomcat很慢原因及解决方案
- 两种不同的编程学习观点,深度还是广度?
- 游戏圈子--创业股份没拿到,你该怨谁?
- 监控利器之 Prometheus
- CentOS 7.3下MongoDB 3.4.9安装配置和基本操作
- lua库 调用
- 一个网工的十年奋斗史
- Spring Cloud实战小贴士:Ribbon的饥饿加载(eager-load)模式
- 祖冲之究竟是如何算出圆周率的?
- 关于FACEBOOK 的 REACT 专利许可证