谈谈使用过的几款咖啡机

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货

最近看过此主题的会员

H1B/绿卡遥遥无期
又不想回国
来东南亚最大的互联网集团工作?
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 2210|回复: 21
收起左侧

CS61B - 等待学校结果靠刷课转移注意力

[复制链接] |试试Instant~ |关注本帖
我的人缘0
gritwins 发表于 2018-2-24 12:29:08 | 显示全部楼层 |阅读模式
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

[其他]Data Structures, Spring 2018 #4 - 2018-01-17@UC Berkeley

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
背景:
已经申请18Fall,为了缓解紧张和等待的焦急,通过记录刷课来转移注意力。工作中使用的主力语言是Python,通过CS61B夯实Java基础,为刷题做足准备。

课程地址:
http://sp18.datastructur.es/

进度说明 (一共15周课程):

Week 1: 已经完成,主要是java语言的介绍,极度OOP的语言确实能通过另一个视角帮助我们看待编程语言;
Week 2: 已经完成,介绍递归和一些基本数据结构:单向链表,双向链表,开始使用IntelliJ环境(之前一直是Vim),完成Project 0 - NBody,很经典的一个project,模拟星球运行;
Week 3: 已经完成,涉及TDD思想,以及List数据结构的两种实现方式:链表和数组,Project 1A - Data Structures, 使用Linked List和Arrays来实现Deque这种数据结构, 哨兵Node的涉及和array的resizing思想很受用;

进度追踪:

定期更新自己的学习进度,也希望和其他学友一起交流。


评分

参与人数 4大米 +13 收起 理由
jamesleborn + 3 很有用的信息!
debuger + 2 厉害了 我的哥!
jiahui + 3 给你点个赞!
小石匠 + 5 给你点个赞!

查看全部评分


上一篇:Algorithms, Part II 组队一起刷
下一篇:UCB CS 61B 求队友!!!
我的人缘0
 楼主| gritwins 发表于 2018-2-26 17:10:53 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
loveboy26 发表于 2018-2-26 05:56
我也准备跟这个课,想请问你是怎么测试你做的HW和PROJECT的? 他有公开的TEST CASES之类的吗貌似不是学生没 ...

我觉得guide挺完善的,没有autograder倒也不是特别影响。
回复 支持 1 反对 0

使用道具 举报

全球28万学生4.7分推荐
我的人缘0
loveboy26 发表于 2018-2-26 05:56:50 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
我也准备跟这个课,想请问你是怎么测试你做的HW和PROJECT的? 他有公开的TEST CASES之类的吗貌似不是学生没法ACCESS他那个AUTOGRADER(GRADESCOPE)
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-2-26 17:08:46 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
本帖最后由 gritwins 于 2018-2-26 17:09 编辑

Week 4:  Lecture:  

1. 提出继承:这是OOP中特别强大的一个概念,如果想要扩展父类的功能,就要接触到这个概念,这个概念首先很自然映射到现实生活中,其次,很好地实现了DRY的理念。有几点需要注意:第一,constructor无法被继承,需要借助super关键词,但是java会隐式调用无变量的constructor; 第二,继承用extends关键字实现,如果没有其实都隐式地继承了Object类;

2. 封装概念:OOP很好地表达了封装,就像我们使用餐厅服务,我们根据餐厅提供的“方法”,点餐,付款,进餐,而不需要关心餐厅具体实现其方法的“具体细节”;怪不得java是特别好的一门面向团队的语言,强大的封装特性能够更好地实现拆分任务从而分配到各个开发身上;然而,继承很有可能破坏了封装的特性,我是这么理解的,开发还是要对于自己所要继承的父类的实现有所了解;

3. 静态类型 vs 动态类型:对应也就是编译时类型和运行时类型,其实仔细画图分析即可,课程中有很多练习都涉及到这一点,特别是在做cast(类型转换)的时候;

4. 学习CS61a或者lisp时有一个很好用的概念是HoF(高阶函数),这个在函数是一等公民的编程语言中特别有用,但是对于java选择了用 interface的方式曲线救国实现HoF,eg:各种Comparator;

5. 使用接口支持多态:我的理解是,接口定义了统一的方法,有很多类都实现了这些方法,那么就可以用统一的方式进行调用,主要应用在:Comparable上

6. 介绍Abstract Data Type, ADT其实定义了What, 而具体实现就交给了实际的类,比如课程中一直做的大作业Deque, 我们会定义Deque这个interface,ArrayDeque和LinkedListDeque就是两个Deque的经典实现,比如未来我们找到了一种更好的实现方法,完全可以无缝插入到现有代码中,这让我联想到了网络的layered design,这种封层思想其实体现在CS的各个角落;

7. 初步认识了java.util中的集合数据结构,List,Set,Map,其实和Python一对比就非常有趣,Python内置了这三种数据结构:list(), dict(), set(), 作为使用者我们根本不需要关心他们的实现方式(实际上python的list底层也是需要resize的)。讲师大大鼓吹了java的好处:更加面向computer底层,所以更好调优!

8. 抽象类,提供了比interface更加强大的功能,可以说是interface的加强版,但是复杂度也增加了,Python中其实有一个叫做abc的包就是抽象类的思想

9. 包管理,简单一提   

Project:  

在Project1A的基础上扩展Project1B, 主要是基于ArrayDeque和LinkedListDeque的应用,判断回文词; 另一个有价值的作业是自己写autograder,可以说是引入了一些随机测试的方法,很有价值。

评分

参与人数 1大米 +5 收起 理由
小石匠 + 5 给你点个赞!

查看全部评分

回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-6 19:26:22 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
Week 5-a:

这个拖地比较久,因为收到了CMU MSE的录取。不用太焦虑了,但还是要继续坚持。还是先把CS61b做完,然后学习一下system的课程,cmu有一门pre-course ics 貌似load也很高。

Lecture:

1. Coding in the real world 给大家看了一下STEM专业多么稀缺,鼓励大家投入码农的行业,本周有一个Midterm,所以后半段基本都是答疑;
2. 接下来补充一些相对比较高阶的java语法:
    1. Autoboxing 和 unboxing:以前真不太懂int与Integer之间的区别,后者会把前者包裹起来成为一个类,提供了各种和这个类相关的方法,好处在于不用显式地去做相关转换,但是作为一个effective programmer建议还是不要依赖这种特性,因为box后的会占用更大的内存;
    2. Widen, 对于一些primitive,比如int会做扩展,这个在强类型语言中可能提供了一种便利吧,比如从int -> double 长度增加
    3. Immutability,典型的就是string类型,如果要改变,只能生成新的对象,其次,private本身不能被user 改变,最后,使用final关键词可以控制其immutability
    4. Generics,类型在runtime的时候动态捆绑,可以使用这种技巧,大大提升对于代码复杂度的管理,之前的课程中已经提到很多,重点注意静态方法中使用generics需要先显示的在方法前写一下(类似提前声明),有些时候声明中有的类实现了某些接口,使用“extends”注明实现关系,这一点确实很困惑,为什么不用“implements”呢?
    5. 基本的exception概念,try…catch结构,使用throw主动抛出去(python中是raise),核心就是使用exception其实可以更好地控制代码的workflow,写过golang的深刻地理解这一点 :),如果exception没有被主动处理那么就会逐层向上抛,这个就是stacktrace
    6. 异常分为checked和unchecked, 对于Error和runtime exception可以不用处理,但是对于其他的或者需要捕捉处理或者需要在方法定义时用 throws 说明
    7. Iterables <> Iterator: 这一组概念完全可以类比 Comparable <> Compartor, 在python中也有类似的magic method, __next__, __iter__, Iterator实现了hasNext和next两个方法,就将一个集合类做成可以循环迭代的对象了,然后使用for循环就很方便(我理解for循环本身也使用的是hasNext和next两个方法)

Practice:

对于ADT有一些深入练习,比如:List, Set, Map 以及 Stack,PriorityQueue。特别有印象的就是使用两个Stack来做一些高级功能,比如浏览器的前进和后退的实现。

Midterm:

我是打印出来在高铁上自己做的,160分,大概能得130分左右,主要对于静态类型和动态类型掌握并不是太好,可能就是python转过来的原因,哈哈

接下来主要集中在Project2的实现,josh说这个是十分challenging的project,推荐两人一小组进行,如果有感兴趣的,大家一起组队吧。
回复 支持 反对

使用道具 举报

我的人缘0
dut2010 发表于 2018-3-13 10:15:53 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
gritwins 发表于 2018-3-6 19:26
Week 5-a:

这个拖地比较久,因为收到了CMU MSE的录取。不用太焦虑了,但还是要继续坚持。还是先把CS61b ...

我想做project 2,请问怎么组队。
回复 支持 反对

使用道具 举报

我的人缘0
SSGEZREAL 发表于 2018-3-13 17:06:16 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
求问楼主我刷完CS61A 关于Data Structure 还有别的课可以看吗
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-14 10:14:34 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
dut2010 发表于 2018-3-13 10:15
我想做project 2,请问怎么组队。

加个好友?
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-14 10:15:22 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
SSGEZREAL 发表于 2018-3-13 17:06
求问楼主我刷完CS61A 关于Data Structure 还有别的课可以看吗

推荐MIT的6.006,是用python讲的,也可以Princeton的算法课
回复 支持 反对

使用道具 举报

我的人缘0
17717093229 发表于 2018-3-17 11:06:10 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
求加好友~我刚上完week2在做project1A
回复 支持 反对

使用道具 举报

我的人缘0
Pro MacBook 发表于 2018-3-18 11:52:08 | 显示全部楼层
  此人我要顶:
 
0% (0) 【我投】
  此人我要踩:
 
100% (3) 【我投】
Hi, 请问github上的作业 是可以下载下来做 lab的嘛  cs61b
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-18 16:15:43 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
没问题啊,下载skeleton-sp18的,里面有文件夹
回复 支持 反对

使用道具 举报

我的人缘0
guiqiu 发表于 2018-3-18 21:37:38 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
请问一下,国内怎么上YouTube?看不了这个视频,请问能推荐一下vpn吗?
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-19 10:41:45 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
guiqiu 发表于 2018-3-18 21:37
请问一下,国内怎么上YouTube?看不了这个视频,请问能推荐一下vpn吗?

自己在aws上搞
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-22 20:32:09 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
Week 5 ~ 6a:

进度推进地比较慢,继续坚持,完成了Week6的lecture部分,大部分精力花在作业上,不得不赞一下这门课程的设计者的用心,推荐大家一定要认真完成Homework,lab和project(Project 2现在还没有着手开始弄,努力!)

Lecture:

1. Package 概念,将不同代码分配在不同的包里,也是在消除代码复杂度,方便更好地管理,大型项目中这是特别好的策略。不由地想起了Python项目中的cookie cutter,利用脚手架自动生成代码。
2. Access control, 主要介绍了private, protected, (package private), public 修饰符的用法,之前没有接触过的是省略不写就是package private,作用依然是封装,对外暴露合适的接口而隐藏实现细节。留意:虽然package private在子类中不可见,但是如果在同一个package的子类依然可见。
3. Objects中的特定方法,这个我是完全类比Python的Magic Methods,比如toString对应__str__/__unicode__, hashCode对应__hash__
4. ADT和API设计的一些原则,这也是我特别感兴趣的一部分,都说优雅的API设计,什么才算优雅?多少算优雅?我觉得还是要靠经验积累,多看别人的源代码才会慢慢有感觉,前几天看了Kennith的records源代码,挺赞叹OOP的设计方式的。其中提到了Uncle Bod 的 SOLID的设计原则:
    1. Single responsibility principle: 我理解不要让一个类承担太多的职责,比如一个Caculator类,不要让它去format最后的计算结果而是另用一个Formatter类;Python的logging模块完美地诠释了这一点,有formatter,handler,emitter,各司其职;
    2. Open-closed principle: 可扩展性,不破坏已有类的情况响应变化,听说linus写git时,基本数据结构在后面迭代时没有被修改过,这就是一个特别好的例子;
    3. Liskov substitution principle: 在继承的时候需要多考虑一层,比如square和rectangle的例子,如果square继承rectangle,那么square中就会有rectangle里的setWidth和setHeight的方法,显然这些方法在square中是有问题的;这就违反了liskov原则
    4. Interface segregation principle: 不应该强迫去实现一些实际上我们不会用到的接口,而更多用Plugin的方式插入;
    5. Dependency Inversion principle:实体不应该依赖具体实现层,应该用接口替代。比如:不应该直接给MySQL的数据库连接,而是一个抽象意义的数据库连接接口,提倡面向接口而不是面向实现
5. 区分Delegation 和 extension, 什么时候使用继承(extension),什么时候使用组合(Delegation)

Practice:

1. Project2 的基本地图绘制任务,如何把一个问题拆解成若干问题,并且组织在代码里面实现出来,it needs practice;
2. HW1 的GuitarHero:温习Interface,AbstractClass等基本概念,话说那个midi旋律特别酷炫
3. 作业中有一个任务:设计一个停车场,我学到了先不着急进入实现细节,而是充分设计好接口,然后再敲键盘,强烈推荐大家把它实现,涉及到PriorityQueue,Map等数据接口的使用

终于要全力搞Project2了!
回复 支持 反对

使用道具 举报

我的人缘0
mk48 发表于 2018-3-23 01:08:04 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
挺好的  感謝資訊

评分

参与人数 1大米 +3 收起 理由
hhh146578 + 3 很有用的信息!

查看全部评分

回复 支持 反对

使用道具 举报

我的人缘0
嘻嘻嘻嘻嘻嘻嘻 发表于 2018-3-24 12:45:56 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
忍不住叹气。。。Project2 Phase1的Generating World也太难了。。。哎
回复 支持 反对

使用道具 举报

我的人缘0
simple_xp 发表于 2018-3-25 00:14:46 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
感谢分享资源~~~~~~
回复 支持 反对

使用道具 举报

我的人缘0
 楼主| gritwins 发表于 2018-3-25 18:05:04 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】
嘻嘻嘻嘻嘻嘻嘻 发表于 2018-3-24 12:45
忍不住叹气。。。Project2 Phase1的Generating World也太难了。。。哎

真的吗?
回复 支持 反对

使用道具 举报

我的人缘0
嘻嘻嘻嘻嘻嘻嘻 发表于 2018-3-26 08:56:32 | 显示全部楼层
  此人我要顶:
 
0% (暂未有人投票) 【我投】
  此人我要踩:
 
0% (暂未有人投票) 【我投】

可能是我基础太差了。。不过像josh给出的demo那样的generating world我不太会实现,其实2D roguelike tile-based world这个话题也有很广泛的讨论了但我就是实现不了哎。我参考了http://journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes/这篇文章和一些Stack Overflow上随便看的讨论,写了一点,现在有点卡壳,再去继续憋代码了,楼主加油!
回复 支持 反对

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html






手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-6-25 11:46

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表