jyttwc6590
加版版主。刚刚从滑铁卢大学毕业。在滑铁卢地区工作+等pr。
最近还是需要攒人品,写个Lz找工作的经历贴。供需要找编程工作的人参考。Lz本身水平不高,有错误的地方也请大家指出。本科是学CS或者SE的大神可以忽略此贴,Lz的水平肯定不及你们。
Lz一共用了3个多月时间找到工作。期间也有些奇葩 经历,写出来给大家参考。
此贴以后慢慢更新。
1. 基础知识篇
你需要有一些能写到简历上的项目经历。可以是自己码的。面试的时候肯定会问。
如果你本科不是CS或者SE的,准备换行当码农的。至少需要掌握基础的算法、数据结构、1-2个编程语言、软件工程、数据库、操作系统。(注:下面列出的是最最基本的要求)
算法与数据结构:需要熟练掌握各种数据结构的特点、时间和空间复杂度、适用的场合等等,包括map、list、tree、stack、queue等。(hash有很多公司喜欢问。包括expected complexity, collision, separate chaining,还有就是arraylist和linkedlist)。各种排序的算法的复杂度,需要熟练的写出各种排序算法的代码,其他算法如recursion、DP也需要掌握(可以不用掌握图形算法)。网上有很多online course。上完了去刷leetcode的简单和中等难度的题。刷完基本可以应付一般的公司的面试。
编程语言:主流的包括java、C#、 C++、 python、javascript。需要掌握至少1门,了解object oriented programming的概念和特点。
以java为例。需要了解四大特征 Abstraction, Encapsulation, Polymorphism, Inheritance。Interface和abstract class,内存管理(garbage collection),多线程和同步、异常处理等。
软件工程: 需要了解design pattern,lifecycle,和testing的内容。了解基本概念。
数据库: 会写简单的SQL语句。了解关系型数据库的概念。schema, table, view, trigger。normalization, denormalization. 3NF, BCNF。different joins。 Transactions, deferent isolation levels。
操作系统:了解操作系统的基本概念。问的最多的是process和thread的区别。另外还有 scheduler, paging, socket, what is deadlock, concurrency control, multi-threading, synchronization, DMA
网络知识: 这个问的不多。一般会问TCP和UDP。还有when u click a website, what happens。
另外,需要知道linux的常用命令。git/svn的常用命令。。。。