科技改变生活 · 科技引领未来
第一周:熟悉 Java基础
要积极探索 Java的使用方法,尽可能多的完成下面这些任务
第一天 基本概念(4小时): java程序员需要了解的底层知识,变量,输入,条件语句
列表,for循环,while循环,函数,数组,枚举,导入模块,基本语法,编程规范,搭建环境,依赖框架等
第二天 基本概念(5小时): 硬件和操作系统的底层知识,操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务
第三天 简单编程问题(5小时): 操作系统之进程管理,Linux系统的内存映射内核同步方法及用汇编启动内核 存储分配、存储共享、存储保护 、存储扩张,文件存储空间的管理、目录管理 、文件操作管理、文件保护
第四天 中级编程问题(6小时): 虚拟文件系统,文件描述符,IO重定向 , 内核中PageCache、mmap作用、java文件系统io、nio、内存中缓冲区作用
第五天 数掘结构(6小时): ,Socket编程BIO及TCP参数,C10K问题及NIO精讲IO模型性能压测,网络编程之多路复用器及Epoll精讲操作系统之进程管理
Linux系统的内存映射内核同步方法及用汇编启动内核
第六天 面向对象编程 (6小时): 详解线程池:自定义线程池,JDK自带线程池,ForkJoin, 详解线程池:自定义线程池,JDK自带线程池,ForkJoin,单机压测工具JMH,单机最快MQ - Disruptor原理解析
第七天 算法(6小时): 单机高并发应该掌握的线程基础:线程状态,异常与锁等, 解析自旋锁CAS操作与volatile ,JUC包下AtomicXXX类与新的同步机制:Latch Semaphore等,LockSupport,高频面试题,AQS源码,以及源码阅读方法论 ,强软弱虚四种引用以及ThreadLocal的原理与源码线程池可用的各种高并发容器详解:CopyOnWriteList,BlockingQueue等
第二周:开始软件开发(构建项)
软件开发需要在会编程语言的基础之上学习更多边缘知识
第一天 开发工具下载与安装(8小时): 软件开发工具是用于辅助软件生命周期过程的基于计算机的工具。通常可以设计并实现工具来支持特定的软件工程方法,减少手工方式管理的负担。下载idea和eclipse等
第二天 项目选型与制定开发计划(6小时): 在软件项目管理过程中一个关键的活动是制定项目计划,它是软件开发工作的第一步。 项目计划的目标是为项目负责人提供一个框架,使之能合理地估算软件项目开发所需的资源 、经费和开发进度,并控制软件项目开发过程按此计划进行。 在做计划时,必须就需要的人力、项目持续时间及成本作出估算。这种估算大多是参考 以前的花费作出的。软件项目计划包括二个任务:研究和估算。即通过研究确定该软件 项目的主要功能、性能和系统界面。
第三天 编写代码试运行(5小时): 为了使计算机能够理解人的意图,人类就必须将需解决的问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算体系之间交流的过程就是编程。
第四天 解决bug迭代项目(6小时): 在工作中,由最初的不够细致,经过反思和总结,能够做到更加细致。经过思考明白了工作时间是自己的,因而提高工作效率可以为自己节省很多的时间。态度决定一切,好的态度有助于工作更好地完成,团结协作可以起到事半功倍的效果。经过向大家的学习,在工作完成上更加规范,好的规范除了能让工作完成得更好以外,也能够让自己在学习上更有方向性,能够更侧重地学习到更多。开发任务完成后,以及在遇到问题后学会了总结,这不仅起到学习的作用,也能够避免同样的问题以后再犯,便于查找。
第五天 引用新技术完成更高级功能(6小时): 百度云,哔哩哔哩,优酷开放平台,提供视频播放地址,淘宝客,京东联盟,多多客,提供代金券领取,支付宝,微信实现 认证,支付,退款等,淘宝开放平台,京东智能,百度智能,小米开放平台,提供服务端接口
第六天 部署一台小型机线上运行 (6小时): 部署的工具也有很多,在我本次的作业中使用的是jenkins,通过在本地启动一个虚拟机然后运行jenkins,将其作为目标环境使用jenkins的pipeline进行部署
第七天 总结软件开发遇到问题与下一步计划(6小时):就本次项目开发过程中,我发现如果要开发项目就一定要有合理规范的开发规范和开发流程。我认为不论是个人还是团队合作都应该有开发规范和开发流程,也一定要严格地遵守它,否则在开发过程中会产生许多的问题。
第三周:让自己成为一名程序员
想要成为一个合格的程序员,往往需要满足以下几点要求:
第一天 思想上跟随程序员的日产工作(6个小时)对于很多程序员来说,写出来的代码可能这里因为不小心漏了什么,那里因为不小心没有测试出一个Bug,这里少个符号,那里多个空格等等,因为马虎而出现的问题不在少数。所以,细心,能够很有效地减少开发周期,为整个项目的推进起到良性的作用。
第二天 程序员需要具备的硬性指标(8小时)对于一个程序员来说,你的思维逻辑有些地方其实需要异于常人的。最经典的笑话就是:女朋友让程序员买包子,如果遇到卖西瓜的,就买一个。结果就是,程序员买了一个包子回家。为什么?因为他遇到了卖西瓜的。这个虽然是一个笑话,但是在代码层面,业务流程图上,确实可能需要这样来理解的。所以,一个程序员首先需要培养属于程序员自身的思维逻辑,不然,你对于设计文档的理解就可能有问题。
第三天 程序员安身立命的根本技能(8小时)
你需要熟练的运用一种或多种语言,并且能够用它写出所需要的内容。
A和B聊天,
A问B:“你都会哪些语言?”
B说:“我会中文、英文、日文。
那B是普通人;
B说:“我会Java,PHP,C。”
那B才是程序员。
你一定会说我会说:我会C,C++,C,JAVA,PHP,Python,,,,和中文,英文,韩文,日文,俄文,法文,普通话,上海话,广东话。等等
第四天 文档能力 (8小时)不会写文档的程序员不是一个好程序员。虽然一个程序员写得最多的是代码,且几乎很少有程序员是心甘情愿地写文档,但是一个程序员必须具备一定的文档能力,
第五天 编码习惯 (8小时)什么是编码习惯?简单点说就是,注释,命名规范,编码规范为什么我们必须写注释?因为一个月以后,你可能看不懂你的代码了。为什么要遵守命名规范?因为一个月以后,你可能看不懂你的代码了。为什么要遵守编码规范?因为一个月以后,你可能看不懂你的代码了。你都看不懂你的代码了,其他人还能看懂?更不可能了。所以,一定要习惯写注释,按照命名规范和编码规范来严格完成。
第六天 协作沟通能力 (8小时)研发并不是一个人的战斗,而是一群人的战争。一定要分工配合,不要只是顾自己。不然团队里的其他人被干掉了,你也活不长。
第七天 学习能力 (8小时)这个可以说是决定程序员未来的能力,我见过很多30多岁的程序员,除了CRUD,其他的几乎什么都不懂,他难道10年时间什么都没有学吗?不,他学了,只是他学习的只是业务方面的知识,对于技术方面的知识,仅仅学习他需要的。
第四周:认真考虑工作(实习)问题
已经学习一段时间Java的你如何制定明确的职业发展规划?
第一天 学习简历制作和面试技巧(6小时)简历是求职的第一关,如果简历做得都不好,那么第一批就会被淘汰。在春招实习和秋招阶段,会有大量的简历进入系统,HR最开始筛选的标准一般是简历的格式是否合理,个人信息是否完善。在给图森和字节跳动做校园大使的1年多时间里,我收到了近5000份简历,最后成功获得面试机会的不足10%,90%的人倒在了简历关
第二天 求助一些有丰富经验的老师或者同学 (8小时)其实很多程序员走到这个阶段已经在做软件设计师工作了。这是绝大多数程序员发展的必经之路。因为,程序员在编程序的时候,一方面会实现设计的功能,另一方 面 也在对设计有一个理解、认识、熟知的过程。进而慢慢地从学习别人设计,转向到自己参与或独立设计。如果这个程序员真的非常非常喜欢程序员这个职业,
第三天 自我介绍并准备笔试(8小时)也有一些程序员工作机遇比较好,不但负责了项目的设计工作,而且负责了项目管理工作。对项目经理这个工作有了一定的尝试。因此,这类程序员可以审视一下自己,是否合适这项工作。如果自己对这种工作比较满意,而且具备项目经理的要求,则可以向项目经理这个方向发展。项目经理承担着项目管理的职责,对项目负责 要责任。它和程序员的作用也不相同,
第四天 准备好要面试的岗位 (8小时)很多程序员希望自己能成为公司中的主管、经理、老总、老板,这样无论是收入和在公司的地位都相对比较高一些。另外,一方面程序员可能厌倦了年复一年的编程工作,对工作产生了抵触情绪,希望能摆脱这种步步紧逼的工作状态。走向管理者其实要求程序员要比一般人做更多的准备,
第五天 开始寻找需要的岗位 (8小时)我一直说,程序员最大的缺点之一,就是眼光只盯在技术上。程序员在入门阶段和成长阶段,这种情况还是属于正常的。但是,到了成熟阶段这种缺点将严重影响了 程 序员的发展。程序员在工作中不免会接触到用户,不免会了解到用户的需求。从而了解到软件实际发挥的作用,进而了解了自身的工作价值所在。有的程序员则固步 自封,不愿意和外界打交道,
第六天 调整心态准备好面试 (8小时)当然也有一些程序员惰性比较大,满足于现状,享受着眼前的胜利果实,也无可非议。对待这些程序员,我们不要强求他们改变自己的想法,我建议是原地发展,把本职工作做得更好,把自己的技术水平往上再提高一步。在这个过程中他们的能力和自信心都会得到提高,他们的想法不会一直一成不变的。磨刀不误砍柴功,刀快了自然会去砍柴的。
第七天 总结此次学习计划结果(8小时)
不管做哪一行,都该尽早做好职业规划,人都是需要有一个目标去激励自己,Java程序员更是如此。朝着一个目标逐步提升自身实力总会比原地打转好,相信聪明的你该知道怎么做。
高龙