书籍作者:胡东锋 | ISBN:9787302621997 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:9664 |
创建日期:2023-05-24 | 发布日期:2023-05-24 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书从问题入手,使用100多个创意编程范例,试图在深入理解原理的基础上,通过自造“轮子”帮助读者提升代码编写功底和工程实现能力。全书分为12章,内容包括Java入门、分形图像处理、数据结构、网络通信、动态装载、多线程、Raft协议、分布式编程和ZooKeeper框架等,由浅入深实现“美颜相机”“迷你通信会议”“迷你Web服务器”“迷你Raft”等项目。本书针对每一个范例,首先给出代码实现和重要知识点,然后提出任务以使读者发挥创意,提升代码编写技能。
本书由浅入深,有趣有料,适合想提升代码编写水平的大学生、求职者、编程爱好者阅读,也适合有1~2年开发经验的程序员参考,还可以作为各类培训班的培训教材。
这是一本兼具趣味性、实用性、广泛性的好书,简直是编程小白的福音!
一、深入浅出,用可视化项目让读者体验动手创造世界的编程成就感。
二、理论和工程相结合,在动手的同时夯实基础,让读者更直观地理解数据结构、算法、网络等计算机底层原理。
三、通过代码级别的讲解,让初学者有机会在自学过程中丰富自己的实战经验,接触到业界流行的技术框架,为未来实习和进入职场打下坚实基础。
本书特点
互联网大厂每年技术类的校园招聘,一直都是优秀大学生关注的焦点。本书希望为有志于此的同学从菜鸟到高手的学习之路提供一臂之力!本书有以下几个特点。
1. 写10万行代码
技术学习有两个层面:一个层面是熟练掌握更多工具的用法、学习更多知识;另一个层面是提升思考力、实现力,有了想法,就用代码去实现它。相较于面向知识的学习,如何侧重于面向问题的学习?如何为学生创造提出问题的机会?这些都是本书想做的探索。本书中的实践项目,都是先带领学生构建最简原型,初步梳理原理,然后留出尽可能多的空间,给学生创造写代码的机会——没有什么比自己动手写代码更重要!每章最后的任务列表,是你学习写代码的机会,你是否完成这些任务才是本书价值所在。
2. 自造轮子
分布式是什么?我们从零起步,自己写出Raft框架原型。微服务是什么?我们从零起步,自己一行一行地写RPC实现、写Web服务器。队列是什么?哈希表是什么?本书带领你把这些关键的、基础的技术从头学习一遍,让你在实现中理解、在比较中发现,从而实现“掌握一个原理,解决千变的问题”。
3. 激发兴趣
本书从菜鸟的心态出发,以图像、视频特效为起始点,绘制惊艳分形、趣味动画,步步设问,步步惊喜,用尽量简单的代码实现新奇的效果,再提出疑问,引导读者深入探索。在编程学习上,没有什么难题是热情和兴趣解决不了的,动手就会有成就感,想不“Stay hungry,Stay foolish”(求知若饥,虚心若愚)都难!
任何技术都是在面对现实问题的过程中动态演化而成的。没有搜索并保存全球网页的需求,Google不会凭空提出云计算;没有双十一海量数据请求的压力,阿里的工程师也不可能淬炼出精湛的技术。在学习中勇于提出问题,在实践中面对真实的问题,才是优秀研发人才成长的秘诀。祝愿你在这个用一行代码就服务数亿用户的时代,成就自己的骄傲!
给即将踏入职场的同学的建议
1. 练好基本功
对于技术族的同学而言,代码编写能力好比战士手里的枪、厨师腰间的刀,在职业成长的历程中具有无可替代的作用。枪常擦才亮、刀常磨才快,具备基本的代码编写功底和技术能力无疑是提高技术竞争力的有效手段。尤其在实习阶段,语言、框架、基础、代码、业务理解,都是重中之重,需要不断地多看多写、持之以恒地训练才能练好。卖油翁的秘诀相信大家都听过:“我亦无他,惟手熟尔。”同时,在不同阶段要有针对性地提高自己的技术敏感度,“以不变应万变”,这样,无论业务面临怎样的机遇与挑战,都会有“我自岿然不动”的沉着冷静和“见招拆招”的业务应变能力。
2. 磨炼你的追求,而非迎合别人的要求
许多同学对于工作的印象仍停留在准备算法题和面试阶段,每天想的是公司会考什么、面试官要问什么,而忽略了自己的追求,总是在迎合别人的要求,沉浸在“做题家”的思维中无法抽身;而公司更需要的是“出题家”,能够提出问题并解决问题。逐渐把思维从做题家转变为出题家,尽早树立自己的目标,以结果为导向、用代码体现追求,才能最大化地倒逼自己快速成长。
不能把遵守学习制度当成学习本身,就像不能把遵守工作制度当成工作本身一样。不能用“把事情做完”的心态来完成工作,“完成工作”只是达标,这是远远不够的;应该以120分的心态来完成100分的工作,要么不做,要做就做到卓越。如果长期坚持“把工作完成就好”的错误心态,只会导致自己的职业竞争力逐步下滑,最终将被时代的浪潮拍懵在沙滩上。
现状是有很多同学在大学阶段甚至工作中沿用高中的学习思维,每天按时上下课、不迟到早退、课后完成作业……将“学习”与“遵守学习制度”画等号,把遵守学习制度当成学习本身,循规蹈矩、按部就班,最后导致平庸化。学习时习惯于应付考试,工作后也习惯于应付工作。
3. 结交优秀的伙伴
“你应当成为自己欣赏的人”,很多同学求职时抱着改变世界的宏大理想和怀着一腔热血,目光紧盯“国民级”和“现象级”业务不放,盲目从大流而丧失自己的判断。“合抱之木生于毫末”“九层之台起于累土”“千里之行始于足下”,任何产品和业务都是在每个团队一点一滴的积累中诞生的,个人的一小步经过积淀才能成为人类的一大步。
没有开放的沟通交流,没有切磋琢磨,是很难进步的。“三人行必有我师焉”,不要局限于请教公司分配的一对一导师,身边的每个同事、每位专家都是我们的良师益友,勇于并善于向导师和同事学习请教,让优秀来带动优秀才是快速成长的最佳途径。
“脱略小时辈,结交皆老苍”这句诗出自杜甫的《壮游》,杜甫是老成持重的一代典范,他交朋友时有一个特点,喜欢结交比他大许多的人:孟浩然大他23岁,高适大他12岁,李白、王维大他11岁。这种清醒的认识和超凡的境界同样适用于我们的工作和生活中,用热爱钻研技术、用专注促进沟通,年龄的鸿沟、经验的差距,不会成为我们和大牛深交的障碍。
“幼时学富五车而不知所用,长时孤陋寡闻而不知所求”,有求而学必有所见,善问而学必有所成。当你努力去和优秀者聚集时就会理解:重要的不是在做什么,而是和什么人在一起做。
4. 拥有开放的心态
技术本身生长在社会的土壤中,随着时代的发展而发展。技术的花朵只有在时代背景的映衬中,才能体现价值。精进于一行代码、一串零一固然重要,见木见林见山川大地,才是永续发展之道。
2020年清华大学校长邱勇院士给全体新生赠送了费孝通的《乡土中国》,因为在人类社会,只有更好地理解社会,才能更懂人的发展趋势和前途。卡夫卡有一本小说叫《万里长城建造时》,讲的是长城上的搬砖工人是不懂得长城的存在价值和意义的。同理,很多程序员找不到自己的存在感、价值感在哪里。理解了趋势在哪里、价值是什么,才有利于在未来职业道路上乘风破浪、高歌猛进。
这里也给所有技术族的同学推荐一本有别于传统意义的书——《世说新语》,在我看来,可以用五个词概括这本书的精华:玄思、洞见、妙赏、情深、实干!
本书源代码文件,需要用微信扫描下面二维码获取,可按扫描后的页面提示填写你的邮箱,把下载链接转发到邮箱中下载。如果下载有问题或阅读中发现问题,请联系[email protected],邮件主题为“Java图解创意编程:从菜鸟到互联网大厂之路”。
编 者
2022年11月
第1章 OOP上手 / 1
1.1 安装开发环境 / 2
1.2 使用Eclipse / 3
1.3 代码“跑”起来 / 4
1.4 类与对象编写规则 / 5
1.5 类的继承 / 7
1.6 参数传递 / 10
1.7 接口的用法 / 12
1.8 仿QQ登录界面 / 13
1.9 更多界面组件 / 15
1.10 按钮事件的实现 / 18
1.11 验证输入框内容 / 19
1.12 界面的鼠标事件 / 21
1.13 界面上画图 / 22
1.14 鼠标写字 / 23
1.15 重写方法中画图 / 24
1.16 温故知新 / 26
第2章 分形之美 / 27
2.1 代码能做什么 / 28
2.2 画出3D图形 / 29
2.3 多态与传参 / 30
2.4 按钮监听器传参 / 32
2.5 多重继承 / 36
2.6 迭代分形 / 39
2.7 数值转换 / 40
2.8 递归分形 / 44
2.9 谢尔宾斯基三角形 / 46
2.10 门格海绵 / 49
2.11 混沌游戏 / 55
2.12 科赫曲线 / 55
2.13 编写代码画“千变之树” / 58
2.14 编写代码“造山” / 61
2.15 经典之作——曼德勃罗集 / 65
第3章 创意项目实践 / 69
3.1 美颜相机之图像特效 / 70
3.2 深入理解颜色 / 72
3.3 图片特效实现 / 73
3.4 图像卷积算法 / 76
3.5 视频的获取与绘制 / 79
3.6 图像双缓冲处理 / 80
3.7 视频的运动追踪 / 82
3.8 视频哈哈镜 / 83
3.9 五子棋开发 / 85
3.10 对战游戏开发 / 89
3.11 生产消费模型 / 91
3.12 粒子运动系统 / 95
第4章 初探数据结构 / 103
4.1 数组的基本用法 / 104
4.2 数组排序与时间复杂度 / 106
4.3 多维数组 / 110
4.4 数组队列的实现 / 112
4.5 链表队列 / 113
4.6 哈希表实现 / 116
4.7 哈希表的4个关键问题 / 119
4.8 集合框架 / 120
4.9 二叉树结构 / 121
4.10 使用JTree组件 / 123
4.11 哈夫曼树应用 / 126
第5章 迷你视频会议项目的实现 / 132
5.1 上手编写通信服务器 / 133
5.2 基本客户端 / 135
5.3 项目编码规范 / 136
5.4 网络画板 / 138
5.5 客户端实现 / 141
5.6 字画同屏 / 146
5.7 通信协议制定 / 147
5.8 网络画板服务器代码 / 148
5.9 网络画板客户端代码 / 153
5.10 视频通信实现 / 157
5.11 视频通信客户端代码 / 160
5.12 视频通信的性能优化 / 163
5.13 简版录像播放器 / 165
5.14 使用内存字节流 / 168
5.15 群发功能服务器实现 / 169
5.16 迷你会议项目拓展 / 173
第6章 迷你RPC框架的实现 / 174
6.1 为了简单地生活 / 175
6.2 迷你RPC框架分析 / 176
6.3 RPC公共代码实现 / 177
6.4 迷你RPC服务器代码实现 / 178
6.5 分发公用库给客户端 / 179
6.6 客户端编码实现 / 181
6.7 注意事项 / 182
6.8 配置文件设计 / 183
6.9 XML配置格式设计 / 184
6.10 使用Dom4j解析XML / 185
6.11 RPC服务器发布设计 / 186
第7章 从Spring到迷你Web服务器 / 190
7.1 Spring初体验 / 191
7.2 Spring RPC客户端调用 / 194
7.3 应用Apache HttpClient / 195
7.4 Tomcat快速上手 / 197
7.5 编写Servlet / 201
7.6 在Servlet中接收请求 / 205
7.7 从零实现WebServer项目 / 208
7.8 HTTP分析 / 209
7.9 session原理测试 / 210
7.10 迷你Web服务器实现 / 214
第8章 再探二叉树 / 222
8.1 二叉树分类 / 223
8.2 图解二叉树 / 224
8.3 二叉搜索树 / 225
8.4 堆排序树 / 227
8.5 红黑树 / 229
8.6 手建红黑树 / 230
8.7 树的旋转 / 231
8.8 编码极简红黑树 / 233
8.9 B+树 / 238
8.10 B+树代码实现 / 242
第9章 类的动态装载 / 248
9.1 三分钟上手Robocode / 249
9.2 迷你Robocode初步实现 / 250
9.3 动态添加机器人 / 252
9.4 理解动态加载 / 254
9.5 面向接口编程 / 256
9.6 工厂设计模式的改进 / 257
9.7 反射Class对象 / 258
9.8 动态创建对象 / 260
9.9 动态调用方法 / 262
9.10 代理一个对象 / 263
9.11 代理接口虚拟调用 / 266
9.12 CLASS文件探秘 / 267
9.13 编写一个Java编译器 / 274
9.14 类ACM网站代码编译 / 275
9.15 安全沙箱运行 / 277
9.16 Class.forName源码解析 / 281
9.17 类的卸载 / 284
9.18 对象的回收 / 288
第10章 深入线程 / 295
10.1 无处不在的生产消费模型 / 296
10.2 简单生产消费模型 / 297
10.3 基于wait/notify的生产消费模型 / 298
10.4 wait/notify探秘 / 300
10.5 锁定对象意味着什么 / 301
10.6 ReentrantLock / 302
10.7 阻塞队列实现线程通信 / 306
10.8 自己造个BlockingQueue / 308
10.9 为什么需要线程池 / 309
10.10 真正的Thread在哪里 / 311
10.11 线程池的必要性 / 317
10.12 用线程池送咖啡 / 318
10.13 自造迷你版线程池 / 322
10.14 用Future送咖啡 / 326
10.15 回调的实现 / 327
第11章 迷你Raft的实现 / 330
11.1 分布式是什么 / 331
11.2 CAP理论 / 332
11.3 拜占庭将军的共识 / 333
11.4 Paxos的渊源 / 334
11.5 Raft第一步:选举 / 335
11.6 Raft第二步:日志复制 / 336
11.7 Raft的心跳信号 / 337
11.8 Raft的编码实现 / 338
11.9 分析系统中有哪些对象 / 339
11.10 通过网络收发对象 / 342
11.11 编写业务流程 / 345
11.12 拉票流程实现 / 346
11.13 发送心跳流程的实现 / 350
11.14 客户端存取数据处理 / 352
11.15 实现日志复制过程 / 355
11.16 数据的本地保存 / 359
第12章 菜鸟学ZooKeeper / 362
12.1 检测JDK环境 / 363
12.2 下载安装ZooKeeper / 364
12.3 启动ZooKeeper / 366
12.4 自动选举测试 / 368
12.5 客户端连接 / 369
12.6 zNode常用命令 / 369
12.7 zNode权限设置 / 370
12.8 ZooKeeper客户端编程 / 371
12.9 监听机制 / 373
12.10 下载ZooKeeper源码 / 374
12.11 在Eclipse中配置ZooKeeper
源码 / 375
12.12 ZooKeeper实现分布式锁的
思路 / 376
12.13 分布式共享锁分析 / 377
12.14 分布式共享锁编码的实现 / 382
12.15 分布式独占锁的实现 / 384
12.16 miniCloud项目分析 / 387
12.17 文件上传实现 / 391
12.18 文件下载 / 393