1.序
面试中自我介绍、项目是我们的重头戏,在面试二面、三面中都起到了至关重要的的作用。有可能因为一个点成功上岸,也有可能因为一句话而失之交臂。那么这一块究竟应该如何展现自我呢,下面由我来结合自己的案例阐述一下,希望各位伙伴能梦想成真。
2.简历
下面就是我本人的简历,有人说简历一页比较好,也有人说简历丰富一点比较好。我觉得自己决定,只要简历上的所有东西能有把控,并且自己能通过后续的面试展现出来.那么就是完美的。除去斗鱼的实习经历就是我的春招简历。
3.个人介绍
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电厂外委工程管理系统开发
当时最刚开始的时候先做前端界面。所以就开始做了3个月的前端。Vue部分。后来由于前端部分差不多写完了。后来想着自己要尝试一下不同的技术,再加上师兄们临近毕业,所以开始前后端一起开发。
(难点1)
1 需求复杂,甲方也不懂 甲方他们那边其实也是模糊不清的。真正的甲方是电厂,因为是第一次接这种信息化管理的这种软件,没有经验,所以我们的开发模式是每周进行讨论,就基于软件开发的快速模型模型,我们在短期之内,迅速构建一个简单的软件,然后演示给甲方看,再深入沟通,他们也逐步会明确自己到底想要的东西。我们的方向也更加明确。
做到一半之后发现后面的系统全部是审批流,所以当时就遇到很大的困境,因为之前有一小块不是用工作流写的,这如果不用activiti框架没法进行。所以只得再开发第二套软件。
(两套软件之间如何通信)
以做了一个单点登录系统,然后整合两个后台项目。(如何单点登录)用redis
两套系统大概是这样的,是防止盗链的行为,某人第一次登陆,系统会生成一个token,存到redis服务器中。并且返回给前端,对系统2进行普通访问的时候去redis里面验证。
(安全方面是这样做的)
当时用了9张表
7.技术交流群
QQ
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!