一年工作经验的大专生程序员(java后台—实习篇)

一、文章背景

看着手中的毕业证,才发现转眼三年过去了,却仿佛昨日还是新生报到那会。

作为18应届毕业生已经工作实习一年了,2年学校+1年实习,相信这也是大部分同届生的现状。

那么,一个萌新在进入职场的这一年都经历了什么呢?在校那会我是挺好奇的。

所以想把过去一年的工作现状写出来,算是一份总结,希望一年后,回过来看这篇文章,希望自己变得更加优秀。

其实一直想写一篇一年的工作总结,也希望自己坚持每年都会写一个总结,立个 Flag 明年补充。

这篇文章利用闲余时间断断续续的写了两三周的样子,适合人群:在校或者即将进入职场实习的大专生。

二、阅读步骤

我把这篇文章分为如下几个部分:

技能
认知
总结

三、技能

3.1、java 基础语法

基础语法,这往往是我们找实习工作的一份凭证,如下整理一部分经常会用到的。

1publicprivateprotected、friendly 区别。
2、Collection 和 Collections 区别。
3、Collection 框架中实现比较方法、排序。
4、Overriding 和 Overloading 区别。
5abstract class 和 interface 的区别。
6、是否可以继承 String 类。
7、final、finally、finalize区别
8String 是最基本的数据类型吗、基本数据类型有哪些。
9String 和 Stringbuffer 的区别。
10string 字符串常用方法,字符串转化为整型数方法,整型数转化为字符串方法
11、switch 是否作用在 byte、long、string上。

12、说出一些常用的 集合类和方法
13Set 里面的元素不能重复,用什么方法区分重复与否。
14、ArrayList 和 Vector 区别,HashMap 和 Hashtable 区别。
15、List 和 Set 是否继承自 Collection 接口。
16、说出 ArrayList、Vector、Linkedlist 的存储性能和特性。
17、ArrayList 和 Vector 区别,HashMap 和 Hashtable 区别。
18try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是return后执行。

19、error 和 Exception 区别。
20、运行时异常和一般异常的区别
21、给出一个常见的runtime exception。
22、Java中的异常处理机制的简单原理和应用
23、Java语言如何进行异常处理,throws,throw,try catch finally代表什么意义,try块中可以抛出异常吗

24、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对,equal == 区别。
25、值传递和引用传递

26、面向对象的特征
27、是否可以从一个 static 方法内部发生对非 static 方法调用。
28、静态变量和实例变量以及静态代码块的区别、创建顺序。
29、Java中会存在内存泄漏吗,请简单描述。
30、描述一下 JVM 加载 Class 文件的原理和机制
31、排序的几种方法,了解。
32、什么是 Java 序列化,如何实现 java 序列化。
33、Java中如何跳出多重嵌套循环
34、Java中实现线程的方法,用关键字修饰同步方法。
35、同步和异步区别。
36、线程同步的方法。
3.2、Web 基础
1、了解 Servlet、Interceptor、Listener、Filter 
2、Http 请求,常用的 Get、Post 请求区别, 以及请求头、状态码概念。
3、Cookie 、Session 
5、javaScript 基础语法,以及 jquery 简化后的语法
6、Ajax 请求,跨域顺便了解一下

其实上边这两个部分,一点都不想写进来,因为这本该是在校掌握的东西。

3.3、版本控制
1、git、svn
2、代码冲突解决方案
3、分制管理

团队版本控制这块还是很重要的,从身边同学也有了解到,大部分公司选择 SVN 管理工具,所以很有必要补充 SVN 使用的知识,平时可以锻炼自己,使用 SVN 或者 Git 来提交代码, 我平时的话,两个都有在用,通常自己的项目都是放在《码云》上边。

既然提到版本控制,代码冲突解决真的尤为重要,如果你不是独立负责开发一个模块,那么很难避免的就是“代码冲突”,所以开发中,提交代码之前一定要去对比“资源库最新代码”,确保没有冲突再去更新,或者提交代码。

补充一个工具,Beyond Compare ,代码对比工具,相信我你会用到的。

3.4、spring 核心

之所以单独拿出来,因为他足够强大,企业轻量级开发框架。

  • 1、Spring-IOC:控制反转,分开解释。
    -- 控制:强调对象是由容器控制的,控制了对外部资源的获取。
    -- 反转:以前都是我们自己创建对象依赖对象,反转就是由容器帮我们创建并注入依赖对象。

  • 2、Spring-AOP:面向切面编程,这个所谓的切片:aop 将封装的对象切开,然后找出其中对多个模块产生公共影响的部分,封装成一个可以复用的模块,这个模块称为切面,切面把那些与业务逻辑无关,却被业务模块共同调用的逻辑进行抽取封装,减少系统代码的重复度。

AOP 的解释有点官方,个人理解,使用 aop 技术,你可以对目标对象的方法进行增强处理,比如 a()方法,就是打印一个 syso("你好呀"),但是呢,如果采用 aop切面技术给与加强,你可以在这个a()方法之前之后都可以进行监听,比如打印 syso("你好呀") 之前打印一个"niceyoo",a方法之后打印一个 “2018”

如果你一点都不清楚 Spring 核心,建议搜索了解一下。

3.5、Spring 其他技术
  1. Spring事务:事务的出现是为了确保数据的完整性和一致性,一句话概括:一次提交,要么全部成功,要么失败什么都不做。
    参考地址:https://www.cnblogs.com/niceyoo/p/8729525.html

  2. SpringMvc:简单明了的 MVC 框架。

  3. SpringTask:代码级定时任务,注解方式,可以将它比作一个轻量级的Quartz,使用起来非常方便,只需完成 Scheduled 表达式。

  4. SpringSecurity:用户权限管理,根据角色和用户,实现 UserDetailsService,进行自定义权限管理。既然说到权限管理,不得不提的就是
    Shiro,实际开发中,Shiro 使用相对更容易一点,至于两者的区别,建议搜索了解一下。

  5. SpringBoot:可以理解成 Spring 升级版,简化了 maven 配置,自动配置 Spring,无须手动配置 Spring ,无须各种烦人的 xml 配置。
    其实说到 SpringBoot 真的要画个重点了,特别流行,现在特别火的 SpringCloud 就是基于 SpringBoot 的,后面我也会多的写一些关于 SpringBoot 文章。

3.6、开源框架(Hibernate 、Mybatis)

这两个框架网上一堆的介绍,相信你也不陌生,所以不说什么大道理,根据我实际开发使用情况,做简要概述。

  • 共性:两者都是用来操作 Dao 层的,通俗一点就是用来操作数据库的。
  • 区别:Hibernate 不用手写 sql 语句,内部封装了大量常用方法,同样提供 HQL、QBC 支持 sql 编写, 而 Mybatis 全部需要手动书写 sql 语句;Hibernater 支持自动建表,只需要在实体 Bean 上加入注解,即可实现数据库表的创建,而 Mybatis 需要你自己在 mapper 中一一对应;Hibernate 配合 Spring Data JPA 或者 Spring template 也可实现 sql 语句的编写。
  • 总结:Mybatis 使用起来相对比较灵活一点,而 Hibernate 使用比较方便。
3.7、服务器

Linux操作系统,以 centos 为例:

常用简单命令:ssh、vim、ps、gerp、、tail,df、top,shell、chmod、sh、tar、find、wc、ln、|
目录结构明细:/etc/、~/、/usr/、/dev/、/home/、/etc/init.d/
服务端:jdk、tomcat、nginx、mysql、redis、neo4j启动与配置
nginx:负载均衡、反向代理、配置
java 环境配置;

实际工作中,最可能碰到的就是项目的部署,至于环境的搭建基本会由运维搭建,所以最常用的命令无非是 tomcat 里 start.sh shutdown.sh 脚本的执行,kill - xx 杀掉没有被停止掉的进程,catalina 日志输出等等。

一点建议:

我会建议你去买一台centos云服务器折腾折腾,这样真的很锻炼人,虽然你也可以在本地搭虚拟机。
其实我在大一的时候就有购买自己的服务器,域名等,我会觉得这很有意思,直到现在手里还维持3台服务器以上,配置的话因条件而异,备案域名2个。
至于服务器有什么用,比如部署自己练手的项目,搭 ssr,做个网站,赚点广告费…

3.8、数据库

开发中最常用的数据库:Oracle、MySQL、Redis(非关系型数据库)

Oracle\MySQL 平时自己使用的话, MySQL 使用会比较多,毕竟轻量级,至于两者的区别,实际开发真没多少差距,至少一年实习经验的我是这么看的。毕竟现在还停留在“增删改查”阶段。

Redis 非关系型数据库,这又是个重点,应用场景特别多,经常被作为缓存来使用,如面对数据高并发的读写、海量数据的读写等等。

3.9、第三方接口

一年的工作中或多或少的总会接触到一些第三方的接口:

  1. 支付接口:很多公司都会有商城项目,支付宝以及微信支付流程了解一下,详细资料可以参考官方文档,现在官方已经说得很简单了,像是统一下单,对接已经很方便。

  2. 七牛云存储:这个是自己私下做的项目,涉及到七牛云的文件存储、大文件上传等,公司一般存储都会用自己服务器,所以大文件上传,推荐 webuploader 分片上传了解一下。

  3. 微信公众号开发:这一年在公司独立做了两个微信公众号的小项目,刚接手的时候,也会有懵逼状态,多看官方文档就好了。

  4. 短信接口:这种算很简单的第三方接口,引入依赖,直接调用即可。但需要在第三方后台设置模板等,注意在前后台限定用户请求次数。

  5. 其他接口:邮件发送等。

3.10、电脑部分工具

开发工具:Eclipse、IntelliJ IDEA 、WebStorm
数据库工具: PL/SQL、SQLyog、Navicat
版本控制:SVN、Git
代码对比:Beyond Compare
脚本工具:xShell、Putty
FTP 工具:xftpportable
FQ工具:SSTap-beta、蓝灯
远程工具:VNC viewer
虚拟机:vmware
笔记工具:Evernote
记事本:NotePad++
浏览器:谷歌、火狐
其他:有道翻译、Hjson

四、认知

在帅张的影响下我更新了一个观念,人与人之间最大的差距,其实本质上是认知的差距。

傅盛说过这么一句话:所谓成长,并不来自于所谓的位高权重,不来自于所谓的财富积累,也不来自于你掌握的某一个单项技能。所谓成长,就是认知升级。

举一个例子—富人跟穷人的逻辑思维:

穷人花 10 块,总奢望得到 100 块的价值,不然的话就觉得亏了,而富人花 1w 块,如果能得到 1000 块的价值,他们就觉得这钱没白花,但是即便如此,富人可以轻易获取 1000 块的资源,而穷人即便费劲九牛二虎之力得到 100 块的资源也差距很大。

再比如我花了 1k 买一些付费知识,就必须追求 1k 的价值么?这就大错特错了,我花了 1k,我能得到 1块 的价值,我就觉得是值得,这就跟很多富人,花几十万让小孩报一个班一样,他们奢望小孩一定要在那个班上学到几十万的价值么?不一定,他们要的是小孩能比别人学得多一点,那就是值得了,这就是富人思维。

可是认知,跟这个穷人富人逻辑思维有个毛关系呢?

五、总结

结合上文+现阶段的工作经验做一个总结。

基础知识:参加工作后,发现基础知识如果很薄弱的话,真的要下功夫了,在实际开发中,用到最多的其实还是那些基础知识,如果你觉得自己在学校并没有掌握牢固的话,黑马的基础视频很有必要再看一遍,反正我是又看了一遍,25天的基础课程一周的时间就可以刷完。

代码规范:代码按照规范写尤为重要,一定要养成代码"洁癖",驼峰命名、尽量多的采用英文单词命名,该空行的空行,该缩进的缩进,该回车的一定要回车。代码并不是你以为的写完就完事了,如果写的很烂,别说别人,n 段时间后,回头看看自己都不知道写的什么玩意。

投资自己:一定要舍得给自己花钱啊,腾讯不就一直在给你灌输这个概念吗,只要充钱就能变强,放在咱自己身上,充钱能解决效率。
一定要有选择性的、理性的投资自己、投资知识,你的认知,真的决定你今后的高度,花钱培训也算是一次投资。

学会搜索:不要一有问题就问别人,真的尝试解决过吗?我一直调侃百度不如谷歌,但大部分问题往往百度就能解决,搜不到?自己真的会搜索吗?

学会独立:有人会认为实习,就应该有人带自己,在校那会我也是这样,以为进了公司有个大佬手把手教自己,一有了问题就问;事是这么个事,但是你一定要认识到这个“带”,不是“手把手”,终究还是要靠自己,解决不了的问题,自己尝试实在解决不了再去问,一方面自己印象深刻,另一方面,不浪费别人的时间,如果你私下不努力,并不会有人手把手喂你饭吃。

其他技能:我觉得拥有一点其他技能还是很有必要的,这会使你更有优势,比如我自己会 Android 开发,能独立开发简单的 APP ,有上架应用商店经验,这带给我的优势就是筹码。

时刻学习:一定要保持时刻学习,不要觉得自己公司用不到就不用学了,你能保证你在这家公司一辈子?springboot、springcloud、Flutter、Vue、Angular.js、Echarts、Redis、Lucene、Shiro 、Elasticsearch、Ngix、Zookeeper、Dubbo、WebService、POI 数据导入导出\ 等等等等

最后最后:这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西。同时特别感谢自己的大学老师-昌老师,入门启蒙老师。

博客地址:https://cnblogs.com/niceyoo


2019年7月20修改补充:毕业一年了,第二篇文章来了毕业一年的大专生程序员工作总结(java后台)

我创建了一个java相关的公众号,用来记录自己的学习之路,感兴趣的小伙伴可以关注微信公众号:niceyoo

posted @ 2018-08-23 13:55 niceyoo 阅读(...) 评论(...) 编辑 收藏