大家好,我是小羽。

好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章。

会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全面发展,才能在这个日趋激烈的社会,在未来有更好的发展空间。

话不多说,本期为大家介绍的是关于一些程序员必备技能介绍,相信掌握这些编码内外的技能,我们会朝优秀软件开发人员更近一步。

下面就来看看我总结的这些技能,准备好进收藏夹(吃灰)了嘛?

编码之内

代码规范

虽然说我们现在可以用不规范的方式写代码,现在能看得懂,但等过了几个月后,你再回头看时估计就两眼懵圈了。更不要说万一项目迭代开发,交接给其他人了,所以代码一定要写规范

下面的是我总结的一些代码规范注意事项:

编码方式:统一用 UTF-8,一般情况下不要去改动它。

缩进:统一为 4 个空格,将 Tab size 设置为 4 则可以保证 tab 键按 4 个空格缩进

括号:花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。

空格:if、else、for、switch、while 等逻辑关键字与后面的语句留一个空格隔开;运算符两边各用一个空格隔开;方法的每个参数之间用一个空格隔开。

空行:将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。

变量:一行声明一个变量,不要一行声明多个变量,这样有利于写注释

推荐书籍:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

代码整洁之道

命名规范

良好的命名,则可以大大提高我们的代码易读性,也能大大增强代码的可维护性

下面的是关于命名规范的一些基础:

包命名:域名反写 + 项目名称 + 模块名称,全部单词用小写字母

类和接口命名:使用大驼峰规则,用名词或名词词组命名,每个单词的首字母大写。

方法命名:使用小驼峰规则,用动词或者动名词命名,第一个单词的首字母小写,其他单词的首字母大写。

常量命名:全部为大写单词,单词之间用下划线分开。

变量命名:范围描述 + 意义描述 + 类型描述的组合,用驼峰式,首字母小写

注释规范

注释不仅可以让人读懂代码,甚至能让读代码的人获取更多信息。

下面是关于注释规范的一些建议:

文件头注释:文件顶部统一添加版权声明

类和接口注释:类和接口统一添加 javadoc 注释。

方法注释:方法的用途和参数说明,以及返回值的说明。

变量和常量注释:优先采用右侧 // 来注释,若注释说明太长则在上方添加注释。

框架

在面试中,面试官一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做。

整理的目前较受欢迎的 Java 框架:

SpringMVC:使用了 MVC 架构模式的思想,将 web 层进行职责解耦,基于请求-响应模型。

Struts2:用于构建当代 JavaEEWeb 应用程序,可以帮你快速搭建出一个MVC模型出来。

Hibernate:是一个开放源代码的对象关系映射框架,是一个全自动的 orm 框架,可参考:

「连Hibernate技术都不清楚,你敢说你自己会ORM框架?」

Spring:是一个开源开发框架,是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,可参考:

「一文带你了解Spring框架的基本使用」

SSH:是 JAVA EE 中三种框架所集成,分别是 Struts,Spring,Hibernate 框架所组成,是当前比较流行的 java web 开源框架。

SSM:是三层结合所成的框架,分别是 Spring、SpringMVC、MyBatis 所组成。

Mybatis:是一个简化和实现了 java 数据持久层的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。

Springboot:是一个全新的框架,简化 Spring 的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不再需要定义样板化的配置。

Dubbo:是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及SOA服务治理方案,可参考:

「微服务面试必问的Dubbo,这么详细还怕自己找不到工作?」

Apache Shiro:是 Java 的一个安全框架,旨在简化身份验证和授权

SpringCloud:是微服务的一种解决方案,依赖 SpringBoot 实现。包含注册中心(eureka)、客户端负载均衡(Ribbon)、网关(zull)、分布式锁、分布式会话等,可参考:

「图文详解:如何给女朋友解释什么是微服务?」

「再深一点:如何给女朋友解释什么是微服务?」

数据库

比较重要的是数据库优化部分,小羽之前总结过一篇关于 MySQL 优化的文章,想要了解的可以到下面文章查看:

「干货!MySQL优化原理分析及优化方案总结」

最常见的数据库模型主要是两种,即关系型数据库(SQL)非关系型数据库(NoSQL)

关系型数据库:

•大型:Oracle、DB2•中型:SQL Server、MySQL•小型:Access

非关系型数据库:

•临时性键值存储(memcached、Redis)•永久性键值存储(ROMA、Redis)•面向文档的数据库(MongoDB、CouchDB)•面向列的数据库(Cassandra、HBase)

经常使用的是 Redis,可以参考这篇文章理解:

「玩转Redis|学会这10点让你分分钟拿下Redis,满足你的一切疑问」

常见数据库:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

常见数据库

数据结构

小羽的文章中也详细的图文介绍了各种数据结构的使用:

「有人相爱,有人年少财务自由,有人数据结构都背不出来」

对各类数据结构进行了分类,并且从定义、特点、原理解析使用方法以及实现的相关案例相结合:

•栈 stack•队列 queue•链表 Link•散列表 Hash Table•排序二叉树•红黑树•B-TREE•位图

数据结构推荐书籍:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

大话数据结构

算法

我在之前的文章中详细介绍过一些关于 Java 经典算法:

「算法很美,听我讲完这些Java经典算法包你爱上她」

「周末给女友讲了遍加密算法,没想到...」

主要有以下经典算法,详细介绍了各个算法的简介、应用场景、步骤、代码示例

•二分查找•冒泡排序算法•插入排序算法•快速排序算法•希尔排序算法•归并排序算法•桶排序算法•基数排序算法•剪枝算法•回溯算法•最短路径算法•最大子数组算法•最长公共子序算法•最小生成树算法

算法推荐书籍:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

算法图解

版本管理

我们需要了解 Git 的每一个具体命令和参数使用,知道执行每个命令会做什么,避免各类分支或者 fork 操作引起的冲突问题

可以帮助我们:

1.保存开发过程中的代码,方便后续修改。2.能清楚的看到每一位团队成员提交、修改的代码,责任到人。3.方便我们完成协同开发的任务,高效工作。4.为后续客户提供关于项目不同版本的记录。

关于代码版本管理的工具有很多,下面是我常用的:

•SVN:替换了当年开源社区最为流行的版本控制软件 CVS,在 CVS 的功能的基础上有很多的提升同时也能较好的解决 CVS 系统的一些不足。•Git:用于 Linux 内核开发的版本控制工具,采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。•GitHub:GitHub 是目前为止,用户最多的工具了,而且也有很多的开源项目提供,一直都是程序员最钟爱的平台,想要学习的话,都可以去下载项目来学习。

主流工具:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

主流工具

构建工具

当然,除了 maven 和 gradle,这里也有其他一些构建工具,感兴趣的都可以了解下:

Hudson:用Java编写的持续集成(CI)工具。

Jenkins:用 Java 编写的一个开源持续集成工具。项目是在和 Oracle 发生争执后的来自于 Hudson 的分支。

Apache Ant:用于自动化软件构建过程的软件工具,源于 2000 年初的的 Apache Tomcat 项目。

SBT:用于 Scala 和 Java 项目的开源构建工具,类似于 Java 的 Maven 和 Ant。

Atlassian Bamboo:持续集成和交付工具,它将自动化构建、测试和发布捆绑到单个流程中。

TeamCity:来自于 JetBrains 的一个基于 Java 构建的管理和持续集成服务器。

Grape:嵌入到 Groovy 的 JAR 依赖项管理器。

Ivy:Apache Ant 项目的一个子项目,一个可传递的依赖项管理器。

Leiningen:一个自动化构建和依赖性管理工具,用于使用 Clojure 编程语言写的软件项目。

常用:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

Jenkins

单元测试

小羽用的最多的也就是 junit 进行单元测试了,使用的是 junit4 这种基于注解的方式来进行单元测试。

常用注解:

1、为了和 spring 集成获取配置的 bean, 通常使用 @RunWith 来加载 springjunit 这个核心类;

2、使用 @ContextConfiguration 来加载相关的配置的文件;

3、通过 @Resource 按名字来注入具体的 bean, 最后在需要测试的方法上面加上 @Test 来进行单元测试。

测试原则:

•源代码和测试代码需要分开;•测试类和目标源代码的类应该位于同一个包下面,即它们的包名应该一样;•测试的类名之前或之后加上 @Test,测试的方法名通常也以 test 开头。

代码示例:

@RunWith(SpringJUnit4ClassRunner.class)//运行spring相关环境 相当于spring监听功能
@ContextConfiguration(locations={"classpath:spring-common.xml","classpath:spring-datasource.xml"})//读取spring配置文件 不识别* 只能识别具体文件 多个配置文件使用string数据传递
public class TestSpring {
  //注入Service层
    private @Resource UserService userService;
    @Test
    public void testFind(){
        List<User> userList = userService.findAllUserInfo();
        for (User user : userList) {
            System.err.println(user.toString());
        }
    }
}

想要学习更多关于单元测试的知识,可以到这篇文章查看:

「告别祈祷式编程|单元测试在项目里的正确落地姿势」

代码调试

当然我们一定要有问题排查的能力,定位到问题来解决。此外,也要学会查看日志,日志能清楚记录我们每一步都做了什么。

这里也给大家提供一些在线调试的网站:

codepad:一款简单的在线 IDE 编辑器服务,只需要把代码粘贴进去就可以编译运行了,支持C、C++、PHP、Python等 9 种编程语言。

Ideone:一款在线的编译器和调试工具,它可以让你来编译,运行,测试和代码,支持 Java、 JavaScript、PHP、Python 等 40 多种编程语言。

PractiCode:是一款在线 Web 代码调试工具,支持HTML、CSS、JavaScript、VBScript 和 PHP 等语言。

cssdesk:是一个在线调试 CSS 代码的工具。

Google Code Playground:是一款在线调试各种 Google JavaScript API 的工具。

推荐:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

IDdone

重构代码

小羽整理了一些关于代码重构的常用方法:

•提取子函数•公共方法放到父类中•下移函数到子类•封装固定的调用逻辑•使用泛型去除重复逻辑•函数避免过多的入参•转移函数,函数职责分明•状态模式•避免对象为 null•拆分功能

推荐书籍:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

重构

阅读源码

虽然会花费我们大量的时间精力去深刻专研,但是当你面试时候,能对某一个技术点的源码给面试官一阵输出的话,那么面试的主动权就会掌握在你的手里。同时多阅读源码,对于我们解决 bug 也有帮助。

总结一下在 IDEA 中如何阅读源码:

1.定位到构造器/方法实现类2.查看类层级关系3.查看类结构4.源码统计5.具体源码

问题排查与解决能力

这里面会涉及到很多知识,对于我们的知识储备很重要,所以平时一定要做好积累。

也可以从以下几个方面来提升自己的能力:

日志的查看•分析Java的堆栈信息•集群监控指标的查看

日志可以在这块了解:

「别小看 Log 日志,它难住了我们组的架构师」

面向Google编程

普通程序员是面向对象编程的,而真正的高级程序员则是面试 Google 编程的,学好正确的使用 Google 编程是很重要的,同时也是因为 Google 的 Chrome 浏览器自带了丰富的插件,对于我们程序员也十分友好。

我之前介绍的一些关于 Chrome 浏览器插件的介绍:

《Chrome浏览器必备插件推荐》

《Chrome浏览器插件推荐之程序员系列》

有问题,多 Google:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

Google

编码之外

笔记

我们可以把平时记录的技术点、知识、好文章保存或者记录在笔记上。

小羽在这里推荐几款我使用的不错的笔记:

•有道云•印象笔记•OneNote•语雀

推荐语雀:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

语雀

MarkDown

我一般都是使用 typora,这款界面简洁,支持实时预览,支持多种公式类型,支持TOC等标签这款先编写好,然后复制到自己喜欢的编辑器里进行渲染格式,最后发布文章到各个平台。

推荐 Typora:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

Typora

学会写作

其实是无论坚持什么事情都不是一件容易的事情,写作可以先从技术博客开始,后面也可以写一写生活中的事情。反正就是先让自己写起来,先写起来之后养成习惯,你会受益一辈子的。

一般都会选用上面所说的 Markdown 语法写作,编辑工具也很多,在线的、PC端的都有。

比如我书签里的这些:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

编辑器

团队协作

作为一个合格的程序员,我们更应该学会与人合作。有一句话我记得非常清楚,没有一个人的成功,每个人的成功都是建立在和别人合作的基础之上的, 我们是一个整体,需要共同面对困难,一起分享成功。

下面的方法可以参考:

•分工合理,责任明确,模块化•高效的沟通机制(聊天软件,任务面板,邮件等)•定期检查,及时调整(codeReview、日报、周报、大小会议)

不断学习

总结自己编码过程中的局限性,只有在不断的学习过程中,才能使的自己的技术不断上升。

之前整理过一些关于学习平台网站的总结:

《程序员必备的技术网站合集》

《程序员自由工作平台国内外汇总篇》

我书签中的学习网站:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

学习网站

创建自己的产品

我认识的很多大佬,都与出版社有合作关系,出版了自己的书籍,或者入驻 b 站等视频领域有不错的成绩,这对于个人的 ip 塑造以及后续发展会提供很好的影响力。

我认为应该具备以下能力:

•要选择好方向,多调研,了解用户的需要。•在开始之前,尽量先去市场做看看有没有同类产品,了解现状。•注重好细节,以免后续产品缺陷太多。

在以下平台都可以尝试:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

创作平台

身体是革命的本钱

所以,一定要爱护自己的身体,学会养生,不仅是对自己负责,也是对社会负责。

小羽在这里给出的一点建议:

•保持充足的睡眠•养成规律的饮食•坚持健身•多跑步走动•合理的加班•培养其他兴趣

学会技术输出和分享

我们应该把每天学习的知识、技术,或者是看书的心得体会,用自己的方式表达出来。可以通过发博客、公众号等等平台,也可以通过视频的方式。

在我书签里的这些平台,我都会坚持在每个平台分享:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

博客网站

尝试自媒体

对于我来说呢,我觉得自媒体还是很有前景的,有很多人说哪个类型自媒体已经很晚了。我觉得只要你自己用心做这件事,什么时候都不算晚。成功都是属于那些坚持到最后的人的。

我之前也分享过一些关于自媒体的心得和总结

「自媒体人必不可少的多平台同步、一文多发小助手」

「人人自媒体的时代,程序员该如何利用好自己的优势?我记住了这些神器...」

「写给普通人看的自媒体分享|万事开头难,勇于分享自己,我们都很棒!」

需要我们平时多收集整理一些需要会用到的方方面面的工具,才会如鱼得水,应用自如:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

自媒体创作工具

多看官方文档

程序员都应该掌握通过官方文档去学习一个技术的能力,掌握了这项能力,你就具备了学会其他一切技术框架的基础;而且最原始的官方文档,还能锻炼你的自我学习总结能力。

Spring 官方文档示例:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

Spring官方文档

培养自学能力

机会和挑战只会分配给有准备的人,当我们有机遇能进更好的公司的时候,还是需要依靠自身的硬实力的,这个时候如果我们长期自学积累知识的话,相信都可以把握住任何机会的。

我认为自学应该从这几方面入手:

•先确定好当前的方向•做好长期吃苦的准备•有规律有目的型的学习•在一个安静的地方学习•利用好现有的网络资源与书籍**

我虽然是做 Java 的,但是有时间也会去了解其他语言的书籍:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

技术书籍

英语水平

而且我们编程每天都在和英语打交道,有更好的英语水平,对我们代码的命名等等都会有很大的帮助。

推荐几款不错的练习英语的软件:

百词斩•羊驼英语•扇贝单词•有道词典•英语流利说

推荐百词斩:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

百词斩

扩展人际关系

但是我们一定要抽出时间来维护自己的人脉管理。本身压力也比较大,有了更多的朋友的话,我们闲时也可以一起约出来,聊聊天,谈谈未来的发展。每个人的格局都不一样,多多交流,才能不断进步。

下面我给大家说一下我是怎么维护自己的人脉:

•要学会主动联系•多参加一些社交活动•像优秀的人多取经•线上线下都可以认识

良好的逻辑思维

拥有良好的逻辑思维,有助于我们高效地学习,工作,以及生活。总之,练好逻辑思维,可以让我们变聪明、变自信,脱颖而出。

•结构化思维:把事物组成框架,分类、有序的整合起来•系统化思维:整体考虑,注重每一个联系。•打破定势思维:要学会创新,增加求知欲。•情绪控制:合理控制自己的情绪。•换位思考:发生事情冲突,也要在别人角度考虑。

时间管理能力

其实现在影响我们最大的就是手机了,相比大部分都会一有闲暇时间就会大有手机上的娱乐软件(短视频之类)来打发时间,避免这样,我们就需要一些时间管理工具来改善。

给大家介绍一些我觉得不错的时间管理工具:

•番茄 ToDo•Forest 专注森林•滴答清单•小日常•Pendo•块时间•极简代办•Todolist

推荐滴答清单:

「编程羽录」上线,程序员必备的这些技能你能get到嘛?-LMLPHP

滴答清单

最后

哈哈,不好意思,因为很久没更文,所以这一篇就写的有点多了,也算是补上欠下的文章。但是以上列出来的这些清单我相信你用心读完后,肯定还是会有所收获的。

的确,软件开发最重要的技能是提升技术,只要完成任务即可,但是一味的为了完成公司代码而编程我觉得并不可取。

我们也要为自己的未来考虑,毕竟摆在我们面前的 35 岁抉择是迟早会到的,所以不断提升自己的各方面技能才能起到未雨绸缪的作用。

最后一句话,送给大家:硬实力决定下限,软实力决定上下限。编码之外的软实力也是我们不断前进的源源动力,一起加油吧!

05-07 04:46