商品详情
《程序员炼成记:从小工到工程师》
定价:99.00元
书号:ISBN 978-7-301-29893-0
作者:周明耀 著
装帧:平装
出版日期:2018.10
出版社:北京大学出版社
开本:16开
页码:560
内容简介
本书主要介绍了作为一名软件工程师应具备的能力。内容主要包括Java的基础知识和JVM、死锁、CPP技术、Java8技术、G1 GC的实践、Java的优化方向、代码规范深度解读等深度知识,Spring Boot、Spring Cloud、Spring里的设计模式,关系型数据库的代表PostgresSQL和NoSQL数据库的代表Cassandra,分布式技术、消息中间件、大数据框架、搜索引擎、事务、Linux隔离技术、Go语言入门等高端技术。最后一章,包含了作者多年的经验总结,列举了可能会遇到的问题,并提出了解决思路。
本书适合所有软件工程师,尤其适合工作两年以下的人,力求覆盖应用软件开发岗位的校招面试范围。
作者简介
周明耀,2004年毕业于浙江大学,工学硕士。13年软件研发经验,近10年技术团队管理经验,4年分布式计算、大数据技术经验。出版书籍包括《大话Java性能优化》《深入理解JVM&G1 GC》《技术领导力:程序员如何才能带团队》。
目 录
了解这份职业 001 1.1 写在前面 002 1.2 入行前 002 1.2.1 对于ACM国际大学生程序设计竞赛的理解 002 1.2.2 参加校招 003 1.3 入行后 004 1.3.1 深度思考 004 1.3.2 工作时间 004 1.3.3 公司的选择 005 1.3.4 为什么软件基础设施技术人员话语权不高 005 1.3.5 为什么去做高难度的技术 005 1.3.6 技术人员的上升通道 006 1.3.7 跟进最新技术的重要性 006 1.4 自勉 007 学习准备 008 2.1 软件安装 009 2.1.1 JDK安装 009 2.1.2 Eclipse安装与卸载 013 2.1.3 Eclipse快捷键介绍 017 2.1.4 虚拟机安装 020 2.2 数据结构 027 2.2.1 算法简介 027 2.2.2 数据类型简介 029 2.2.3 面向对象程序设计 029 2.2.4 算法效能分析 030 2.2.5 线性表 032 2.2.6 链表 033 2.2.7 堆栈 067 2.2.8 算术表达式的求值法 075 2.2.9 队列 078 2.3 难题解释 091 2.3.1 两个数字相加 091 2.3.2 寻找两个数组的中间数 093 2.3.3 查找字符串中最长非重复的子字符串 097 2.3.4 合并两个链表 098 2.3.5 汉诺塔问题 099 2.3.6 迷宫问题 105 2.3.7 八皇后问题 110 Java基础知识 114 3.1 switch关键字 115 3.1.1 Java 6中的使用方式 115 3.1.2 Java 7中的使用方式 116 3.1.3 新特性的优缺点 118 3.2 设计模式之单例模式 119 3.2.1 引言 119 3.2.2 详细介绍 119 3.3 设计模式之代理模式 125 3.3.1 引言 125 3.3.2 延迟加载 126 3.4 设计模式之适配器模式 132 3.4.1 引言 132 3.4.2 详细介绍 132 3.4.3 适配器模式在开源项目中的应用 137 3.4.4 适配器模式的使用 145 3.5 字符串操作优化 146 3.5.1 字符串对象 146 3.5.2 SubString使用技巧 147 3.5.3 切分字符串 148 3.5.4 合并字符串 150 3.6 数据定义和运算逻辑优化 154 3.6.1 使用局部变量 154 3.6.2 位运算代替乘除法 154 3.6.3 替换switch 155 3.6.4 一维数组代替二维数组 156 3.6.5 提取表达式 158 3.6.6 优化循环 159 3.6.7 布尔运算代替位运算 160 3.6.8 使用arraycopy() 162 3.7 Java I/O相关知识 163 3.7.1 Java I/O 163 3.7.2 Java NIO 164 3.7.3 Java AIO 174 3.8 数据复用 178 3.8.1 缓冲区 178 3.8.2 缓存 184 3.8.3 对象复用池 185 3.8.4 计算方式转换 187 3.9 集合类优化 189 3.9.1 集合类之间关系 189 3.9.2 集合接口 190 3.9.3 集合类介绍 192 3.9.4 集合类实践 194 3.10 Java 8迭代器模型 202 3.10.1 迭代器模式 202 3.10.2 Lambda表达式 204 3.10.3 Java 8全新集合遍历方式 204 3.11 Java 9入门 209 3.11.1 模块化编程 209 3.11.2 模块化系统目标 211 3.11.3 模块化的JDK 212 3.11.4 模块资源介绍 212 3.11.5 HelloWorld案例 213 3.12 常见面试题 214 Java深度知识 222 4.1 JVM内存区域 223 4.1.1 程序计数器 224 4.1.2 虚拟机栈 224 4.1.3 本地方法栈 228 4.1.4 Java堆 229 4.1.5 方法区 234 4.2 JVM为什么需要GC 235 4.2.1 JVM发展历史简介 235 4.2.2 GC发展历史简介 236 4.2.3 G1 GC基本思想 237 4.2.4 G1 GC垃圾回收机制 237 4.2.5 G1的区间设计灵感 238 4.3 如何使用SA工具 239 4.4 死锁及处理方式 246 4.4.1 死锁描述 246 4.4.2 死锁情况诊断 251 4.4.3 死锁解决方案 254 4.5 JavaCPP技术 256 4.5.1 JavaCPP示例 257 4.5.2 JavaCPP-presets简介 259 4.5.3 JavaCPP-presets示例 261 4.5.4 JavaCPP性能测试 270 4.6 Java 8解决的若干问题 271 4.6.1 HashMap 271 4.6.2 行为参数化 273 4.6.3 读取文件 276 4.6.4 Stream 277 4.7 JDK 8与G1 GC实践 291 4.7.1 基础解释 291 4.7.2 G1 GC参数讲解 292 4.8 Java的优化方向 303 4.8.1 Java EE 303 4.8.2 函数式语言 305 4.8.3 VM启动时间优化 307 4.8.4 JIT编译器 308 4.9 代码规范深度解读 308 4.9.1 下画线或美元符号 309 4.9.2 拼音与英文混合 309 4.9.3 类命名 309 4.9.4 方法名、参数名和变量名 310 4.9.5 常量命名 312 4.9.6 抽象类的命名 312 4.9.7 避免常量魔法值的使用 312 4.9.8 变量值范围 313 4.9.9 大括号的使用规定 313 4.9.10 单行字符数限制 314 4.9.11 静态变量及方法调用 315 4.9.12 可变参数编程 316 4.9.13 单元测试应该自动执行 318 4.9.14 单元测试应该是独立的 318 4.9.15 BCDE原则 318 4.9.16 数据类型精度考量 319 4.9.17 使用Char 321 Spring相关知识 323 5.1 Spring Boot 324 5.1.1 初始Spring Boot 324 5.1.2 Spring Boot示例 337 5.1.3 Spring Boot创建Restful API示例 341 5.1.4 Spring Boot使用JavaMailSender发送邮件 344 5.1.5 Spring Boot 1.5.x新特性 347 5.2 Spring Cloud 349 5.2.1 Spring Cloud简介 349 5.2.2 Spring Cloud Eureka 350 5.2.3 Spring Cloud Consul 353 5.2.4 分布式配置中心 354 5.3 Spring中的设计模式 358 5.3.1 解释器设计模式 358 5.3.2 构造器设计模式 358 5.3.3 工厂方法设计模式 362 5.3.4 抽象工厂设计模式 364 5.3.5 代理设计模式 366 5.3.6 策略设计模式 368 5.3.7 模板设计模式 370 数据库知识 374 6.1 关系型数据库和NoSQL数据库 375 6.1.1 关系型数据库 375 6.1.2 NoSQL数据库 378 6.2 PostgreSQL相关知识 380 6.2.1 基本操作 380 6.2.2 系统视图表 381 6.2.3 索引 384 6.2.4 查询计划 388 6.3 Cassandra相关知识 393 6.3.1 基本介绍 393 6.3.2 数据模型 393 6.3.3 关键特性 394 6.3.4 访问服务端 397 6.3.5 无中心化实现因素 403 6.3.6 性能测试工具 408 高端技术汇总 411 7.1 分布式系统 412 7.1.1 店长负责制 412 7.1.2 订单处理方式 414 7.1.3 员工角色拆分 415 7.1.4 多个任务接收 416 7.1.5 订单处理过程上屏 416 7.1.6 异常数据干扰 417 7.1.7 座位设计模式 418 7.2 选举算法的机制 419 7.2.1 最简单的选举算法 419 7.2.2 拜占庭问题 420 7.2.3 Paxos算法 422 7.2.4 ZAB协议 424 7.2.5 ZAB与Paxos的联系及区别 432 7.3 HDFS中NameNode 单点失败的改进案例 432 7.4 从星巴克下单过程看事务处理方式 435 7.5 软件工程师需要了解的搜索引擎知识 437 7.6 从eBay购物车丢失看处理网络I/O 443 7.7 Apache Kafka工作原理及案例介绍 446 7.7.1 消息队列 446 7.7.2 Apache Kafka专用术语和交互流程 447 7.7.3 利用Apache Kafka系统架构的设计思路 448 7.8 Apache ZooKeeper服务启动源码解释 450 7.8.1 ZooKeeper服务启动 450 7.8.2 流程及源代码解释 456 7.9 ZooKeeper Watcher机制 464 7.9.1 集群状态监控示例 464 7.9.2 回调函数 468 7.9.3 实现原理及源代码解释 469 7.9.4 ZooKeeper Watcher特性 480 7.10 HBase数据导入方式 481 7.10.1 启动HBase 481 7.10.2 向HBase导入数据 482 7.11 HBase优化策略 495 7.11.1 HBase数据表概述 495 7.11.2 HBase调用 API示例 496 7.11.3 HBase数据表优化 500 7.12 CGroup技术 506 7.12.1 CGroup介绍 506 7.12.2 CGroup部署及应用实例 508 7.13 Go语言 517 7.13.1 示例程序 517 7.13.2 命名规范 518 7.13.3 变量概述 519 7.13.4 gofmt工具 520 7.13.5 垃圾回收 520 预见未来的自己 522 8.1 遇到Bug时的态度 523 8.2 平静看待挫折 526 8.3 当遇到了不懂技术的领导 530 8.4 写给未来跳槽的你 533 8.5 技术选型的注意事项 536 8.6 架构师之路 540 8.6.1 软件行业,苦乐自知 540 8.6.2 如何做好一个架构师 541 8.6.3 走出成为架构师的关键道路 543 8.6.4 回顾与总结 545
- 北京大学出版社旗舰店 (微信公众号认证)
- 【发票】在订单留言电子邮箱、发票抬头、税号、(统一开电子发票,缺一项都不能开票,自行下载打印)
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...