1.序
面试中自我介绍、项目是我们的重头戏,在面试二面、三面中都起到了至关重要的的作用。有可能因为一个点成功上岸,也有可能因为一句话而失之交臂。那么这一块究竟应该如何展现自我呢,下面由我来结合自己的案例阐述一下,希望各位伙伴能梦想成真。
2.简历
下面就是我本人的简历,有人说简历一页比较好,也有人说简历丰富一点比较好。我觉得自己决定,只要简历上的所有东西能有把控,并且自己能通过后续的面试展现出来.那么就是完美的。除去斗鱼的实习经历就是我的春招简历。
3.个人介绍
我是每次答辩、演讲、面试都会准备手稿的,因为我相信机会是留给有准备的人的,而且我从来都不会打无准备的战,因为我相信在这个时代,时刻充满着机会。下面是我的演讲稿。希望能让大家有所借鉴与参考。
面试官您好,我叫###,来自###,现为###计算机学院硕士二年级学生,主修专业是计算机技术;读研以来,我一共参与了三个项目的研发,那我就按照时间的先后来说吧。
在2018年6月到2019年5月我参与了第一个项目:电厂外委工程管理系统,该软件主要是为了电厂的信息化管理而开发的一套系统,分为微信公众号开发和web端开发。该项目前端采用Vue框架,后台部分使用的是Java语言,基于Spring+ SpringMvc+Mybatis框架进行开发的,其中运用Activity工作流框架对工作流程的进行管理。数据库运用mysql来支持。版本控制使用的gitlab。
在2019年5月至2019年8月参与第二个项目CSTK软件1.0版本的开发,因项目需要在此期间于中国空间技术研究院钱学森实验室边实习边开发。该项目使用的是C#语言,运用WPF框架以及Unity3D引擎,开发一套航空三维场景仿真软件。
在2019年9月至今参与第三个项目的CSTK软件2.0版本的开发。因为实验室一直是以航天任务为主的,由于实验室之前的航天软件难以维护,二次开发很困难,所以在实习结束后在老师和师兄师弟们的一起努力下运用所学知识以及经验对以前开发的航天软件进行重新开发。该项使用的是C#语言,运用WPF框架以及Unity3D引擎。这两个项目版本控制都使用的是SVN。但是从技术到性能以及开发效率都有了很大的提升。
以上就是我研究生期间所参与的项目。对于学生工作方面我从本科到目前做了5年的学生工作。(由于在本科期间着重于学生工作,分别担任了计算机学院大一班级班主任,心理健康教育中心学生副主席、学生会综合实践部部长以及辩论队队长等职务。因此,在多重压力下,我学会了如何去合理安排时间,让我的学习、工作和业余爱好都不耽误。最后,感谢贵公司能给我这次面试的机会,谢谢!
4.项目介绍
下面是我的项目介绍,项目这一块重中之重,希望小伙伴们认真对待,有的人说我的项目和互联网不符合,有的人说我没有做过项目。。。。。我是属于前者的,我相信绝大部分也属于前者,那么我就前者情况讲讲我是如何讲解的,其实面试官要的不是你做的项目有多么贴合互联网,是否符合我们的技术,只有小公司才这样,而大公司都是看你的综合能力。看你对待事情的认真程度以及学习能力。对于后者的话我建议是拿自己三年的研究来着重讲一下,即使没有项目但是你有对其思考就可以了。下面放出我的项目准备手稿:
4.1CSTK软件开发
2个unity 1个数据库 1个封装CLR以及工具类开发 剩下的每个人一个模块
(接到项目)
那我就着重讲讲我的CSTK软件开发。由于北京实习做的项目与回来之后做的项目是层层递进的关系,相当于为CSTK软件开发项目打了扎实的基础,并且自我有了很大的提升,所以那我两个连在一起讲吧。研一也就是在2019年5月份的时候正值第一个项目也就是电厂项目 收尾,收到了老师的任务通知,去中国空间技术研究院钱学森实验室开发一套定制版的航天软件。同时我们要独立完成从项目具体需求谈判到代码编写 测试 软件说明书 使用书 项目答辩整个流程。
(到北京后需求)
在北京的细节需求确认是我负责的,因为在第一个项目的锻炼的原因,并且吃过亏,所以对于这次的需求确认比较顺利。当时用了三天把所有的需求全部定了下来,包括一些小的细节全部用文档记录下来并且完成签字。经过沟通我们要实现一个这样的软件,它是**************************************************(这一块写项目的背景)。
(难点1 时间紧 换技术)
因为实验室一直是以航天任务为主的,实验室之前就有相应的航天软件,它是运用MFC框架进行开发、利用OpenGl技术实现仿真。但是我们去北京实习之前没有接触过这两种技术,都是师兄们在做,而且听师兄们说开发进度很慢,学起来不容易上手,为了实验室的未来着想,看看能不能换一种技术,不然旧的软件难以维护,二次开发很困难,(而且时间很短,学习成本很高)所以当时与实验室老师师兄沟通后所以我们当时果断放弃了旧技术,通过查阅资料使用的是C#语言,运用WPF框架以及Unity3D引擎进行开发。为什么用WPF框架呢,因为当时我们之前都是做java的,相对于Html,XML比较熟悉,看能不能找到类似的XML的形式开发。再加上仿真部分各个大公司都在用Unity3D来仿真,所以就选择了C#体系,这样也容易整合。
(难点2 伪结合 通信)
第一个是之前的OpenGl与MFC可以很好的结合,但是WPF和Unity3D之间是没办法直接结合的,所以当时就想到了把Unity3D生成.exe文件嵌入到WPF中进行伪结合。但是如何进行通信呢?由于当时没有掌握Socket通信技术。当时我正在学习一些数据库的知识,刚和看到数据库主从复制那一块,
主从复制大意是这样的,1主数据库A 执行完后写入本地日志系统(bin log)2实时的讲日志系统的数据库操作发送给B,3 B有个中继日志relay log 拷贝 4将这里的操作反应到自己库里。
从数据库中有一个I/O线程不断的监听主数据库中的bin log,并且当时我们用到Mysql数据库作为数据存储,所以想着能不能用Mysql数据库来进行通信呢,所以就尝试了一下WPF与Unity3D之间通信采用的是以mysql数据库为中心点,WPF传递消息向数据库中写指令,Unity3D开一条线程不断地访问数据库,如果发现数据库中有指令就读取出来。但是这个想法有个问题就是这种技术实时性不高,由于航天项目很多是要精确的,好在项目中实时性不是要求很大,所以就用了这个技术。
(难点3 大量的c++ matlab代码)
由于是航天方面的软件,所以会涉及到很多算法,甲方给我们好多航天方面的Matlab以及C语言C++航天算法包,这个我们当时给我们造成了很大的困扰 刚开始翻译了几个,感觉我们的大部分时间都用来翻译代码了。软件开发任务很重。我们没有足够的时间来进行翻译,以当时就想,我们用什么办法可以不用翻译呢,于是就开始网上找资料搜索。开始当时采用了CLR组件封装的技术。就这样解决了一个大问题。很好的结合到一起。
(回到实验室之后总结经验)
通过以上项目了解了从项目需求制定到开发。到遇到问题,解决,再到项目第三方测试,项目使用说明书编写,项目结题汇报的整个流程,真的很累,但是收获满满。但是在以上开发中没有考虑到性能、安全性、可扩展性,仅仅是按照甲方的需求完成了软件开发。刚刚也提到过,实验室之前的航天软件运用MFC框架进行开发、利用OpenGl技术实现仿真。难以维护,二次开发很困难,再加上我们两个月的交流经历让自己增长不少经验,而且相当于新技术试验成功,开发效率确实很快,对实验室之前的软件进行升级改造。因为我有经验所以当时担任了组长并且负责整个框架的搭建。当然再次期间我们经过了很多很多的讨论。
有个问题就是这种技术实时性不高,由于航天项目很多是要精确的,好在项目中实时性不是要求很大,所以就用了这个技术。因为时间紧张,所以没有优化,回来实验室之后因为我们的软件实时性要求很高,而且要精确,所以就学习Socket技术,运用Socket技术以及mysql数据库进行数据通信以及数据存储。
Socket
多线程:主线程不能去时刻监听消息,派生了一个子线程去接收消息(在子线程中进行tcp连接 用networkstream接收服务端发来的消息,将流消息放到 list消息队列,),接收到后将消息存放到消息队列中,主线程从消息队列中读取首个消息进行处理,然后移除。
(需加锁 因为每次是移除首元素 如果不加锁的话 当我处理完首元素的时候 子线程又添加了一条消息 此时移除的就不是我读了那条 而是新写入的那条消息 所以需要加锁 如果是多线程去读取消息队列的数据需要进行加锁,防止多个线程同时读取到同一消息然后移除了产生错误)
当时为了防止粘包现象我们还在每个消息前后加了我们CSTK开始结束标志。
(改版2 组件技术更加灵活)
由于改版之前有很多的项目代码积累,所以采用了CLR技术进行封装。尤其是里面由于每个模块都会有公共的代码,所以进行了封装这样大家调用的时候只需要2行代码就可以解决,而且封装速度很快,为我们推翻重来简历了很大的信息,而不是花大力气去重写代码。
对于数据库部分操作过多,人数过多,相当于开发人数增多,容易出错。我们的开发小组人员是11个人,学习成本要高,所以都组件化。把数据库进行封装,而且不单单是封装数据库,而且直接封装成不需要sql语句的函数,直接传参数就可以了。
(改版3 讲讲主框架吧)
在搭建主框架的时候考虑了很多,基于之前的版本控制太浪费时间我把组件思想也引进去了。为当时在北京进行项目开发的时候版本控制有点不是那么快速,一旦遇到冲突的时候需要几个人来商量,而且项目中涉及到很多的资源文件的共用问题,所以当时从框架上就全部采用了CLR组件封装技术。每个人都是独立的一块,开发结束后生成组件,集成的话主框架只需要直接调用dll就行了。这样整合过程中不会产生任何冲突,包括资源等,每个人都有自己的dll 还有公共的dll
文件夹是这样构成的
1 上线版本
2 开发版本(提交dllsvn到这个)
3 资源文件
4 窗体模块(各个模块的源代码)
5 公共组件模块(这里面就是大家都会涉及到的算法部分,比如轨道计算,)
6 工具类模块(数据库组件 TeeChart绘图组件)
(不足改进 在我毕业之前完成的)
1这个软件还没有日志系统,软件一旦成型的话那么这个是很有必要的。所以在之后会继续完善。
2由于我们的软件由于某些需求比如对抗打击等要实现分布式,再加上有些数据在一般的电脑上计算能力很慢,而且核心算法包过多使得软件过于臃肿,所以想实现把组件做成服务,搭建在我们实验室的服务器上,这样既安全又高效。
3数据量过大
5课卫星绕地球一天需要40多万条数据,计算并且传输太慢了。每10分钟的数据进行一次拟合144多条数据。用卫星的速度 和时间作为参数。在米级以内的。是可以接受的。
(总结)
感觉这个项目让自己对项目有了很深的认识,
1在不断的遇到问题的时候来解决问题,对软件开发效率,安全性,性能,以及可扩展性更加有考虑,
2作为项目负责人,还需要合理分配工作、实时检查进度、及时解决问题。
我本身就是特别喜欢一个这样的氛围,一群人为了做成功一件事情而一起努力,付出,最后把它完成,中间很累,争吵。不理解,但是最后做完感觉会开心。
(如何体现自己的沟通、主动性独立性、沟通团队、途径、承担)
4.2电厂外委工程管理系统开发
(项目描述)
该项目是自己研一参与的项目,该软件主要是为了电厂的信息化管理而开发的一套系统,分为微信公众号开发和web端开发。web端系统包括人员信息管理,公司信息管理、工程项目管理及违章管理模块。微信端主要用于人员信息录入。该项目后端采用Spring+ SpringMvc+Mybatis框架,前端采用Vue框架,其中运用Activiti框架对业务流程进行管理。
当时最刚开始的时候先做前端界面。所以就开始做了3个月的前端。Vue部分。后来由于前端部分差不多写完了。后来想着自己要尝试一下不同的技术,再加上师兄们临近毕业,所以开始前后端一起开发。
(难点1)
1 需求复杂,甲方也不懂 甲方他们那边其实也是模糊不清的。真正的甲方是电厂,因为是第一次接这种信息化管理的这种软件,没有经验,所以我们的开发模式是每周进行讨论,就基于软件开发的快速模型模型,我们在短期之内,迅速构建一个简单的软件,然后演示给甲方看,再深入沟通,他们也逐步会明确自己到底想要的东西。我们的方向也更加明确。
做到一半之后发现后面的系统全部是审批流,所以当时就遇到很大的困境,因为之前有一小块不是用工作流写的,这如果不用activiti框架没法进行。所以只得再开发第二套软件。
(两套软件之间如何通信)
以做了一个单点登录系统,然后整合两个后台项目。(如何单点登录)用redis
两套系统大概是这样的,是防止盗链的行为,某人第一次登陆,系统会生成一个token,存到redis服务器中。并且返回给前端,对系统2进行普通访问的时候去redis里面验证。
(安全方面是这样做的)
当时用了9张表
(项目最后是这样的)
软件没有成型就结束了。只是单纯的完成了自己的模块,移交给甲方的。周期的人员。开发人员要毕业。
第一点,对java掌握更多,第二点了解整个项目从开接项目,开发,到结题整个流程。第三点对于沟通解决问题能力加强。
接触很多新的技术吧,比如git gitlab docker ssm mybatis activiti 微信端开发 前端
(性能)
审批信息那里加索引。
优化 Sql
1 开启 mysql 慢查询 set slow_query_log =ON
2 (show processlist 查看当前的状态 加锁情况)
3( explain 命令看到的这条语句的执行情况。 Key rows)
4( analyze table t 新统计索引信息)
5.总结
以上是我春招准备的两个项目,每次到项目阶段都让面试官点赞,所以春招拿到了很多的offer,秋招的话主讲自己的实习经历。上面的每一个项目都经历了不断的打磨,每一句话都进行了斟酌,所以我也希望找工作的各位对待自己的未来认真,认真,认真!!!祝各位小伙伴梦想成真。
6.博客公众号链接
博客地址
https://blog.csdn.net/weixin_41563161
掘金https://juejin.cn/user/2814360172369271
知乎https://www.zhihu.com/people/hai-kuo-tian-kong-63-38-21
公众号
7.技术交流群
QQ
微信