七月份经历了很多事情,过得十分充实,不管是在提升自我能力方面,还是在休闲娱乐方面,达到了一个舒适的平衡,也渐渐在心里踏实下来。
ps. 原来的域名azha.site过期了,现在长期使用更有趣的azha.fun作为我的域名啦。

小学期

小学期的内容是使用Java Web技术开发一个模仿12306的网站,其中包含了用户注册、登录、注销、查票、购票、查询订单等基本功能。事实证明,这次小学期算是大学里面最充实的实践了,它在我接下来的面试过程中,充当一个项目抵住了面试官的各个问题。

开发环境

  1. IDE:eclipse photon
  2. 关系数据库:Oracle 11g
  3. NoSql:redis、MongoDB
  4. 消息队列:ActiveMQ 5.11.1
  5. 服务器:Tomcat 8.0.53
  6. 建模设计工具:PowerDesigner

软件三层架构

ui (用户接口层 ):接收用户的输入信息; 业务处理结果,返回给用户,进行友好提示;
biz , service (服务层,业务逻辑层):业务逻辑处理 (业务流程处理、业务实体);
dao ( data access object , 数据访问层,持久层):数据的持久化。
这里应该与MVC模式进行区分

Ajax

Asynchronous Javascript And XML异步的Javascript和XML。使用Javascript进行局部刷新, 服务器回应的数据,不是html,是xml、json或text。客户端多线程,才能实现异步。能发送http请求的是浏览器和applet (ActiveX)或者通过XMLHttpRequest 对象来实现Ajax。

异步特点:

  1. 非阻塞
  2. 速度快
  3. 调用的方法无回应,无返回值,通过回查,来看响应结果

ActiveMQ

ActiveMQ在实际的生产应用中很常用,也是面试官比较喜欢考察的一个点,很多消息的分发,例如:银行转账,就用到了MQ队列。

为什么要用消息队列

主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达数据库,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

消费者接收消息的方式

对于消息来讲,分为生产者与消费者。消费者接收消息的方式分为主动接受与监听两种。主动接受就是主动到消息队列里面去取出一条消息;监听则是开启一个监听器,当消息队列中有消息的时候就实时接收到消息,这种模式下的connection是不能关闭的。在实际应用中,监听的方法更为常用。

JMS支持的两种消息传递模型

  1. 点对点(point-to-point,简称PTP)Queue消息传递模型:
    同一个队列可以关联多个消息生产者和消息消费者,但一条消息仅能传递给一个消息消费者。如果多个消息消费者正在监听队列上的消息,JMS消息服务器将根据“先来者优先”的原则确定由哪个消息消费者接收下一条消息。如果没有消息消费者在监听队列,消息将保留在队列中,直至消息消费者连接到队列为止。在此模型中,消息不是自动推动给消息消费者的,而是要由消息消费者从队列中请求获得。我们还可以利用消息选择器来制定消息的接收者,来达到一个队列针对不同消费者发送消息。
  2. 发布/订阅(publish/subscribe,简称pub/sub)Topic消息传递模型:
    通过该消息传递模型,应用程序能够将一条消息发送给多个消息消费者,所有监听同一Topic的消费者能共享同一消息。消费者需要长期监听Topic,才能在生产者产生消息的时候接收到消息。Topic里的消息一旦发出,就对此消息不负责了,无论消息是否丢失。

其他

  1. 消息的接收与回应:
    生产者指定临时的用于接收回应的队列来用于消费者收到消息是的回应。
  2. 消息的持久化与非持久化:
    ActiveMQ的Queue中的消息默认模式下时持久化的,也就是说,在关闭ActiveMQ的时候,它已经被写入了本地文件中,再次重启ActiveMQ时,依然能接收到消息。我们可以对比较不重要的消息设置为非持久化,减轻服务器的压力。
  3. 消息的超时销毁特性
    对于有时效性的消息,我们可以设置一个超时处理,来对消息进行超时销毁。

Redis和MongoDB

在这里,我们小组画了个饼😜。在后期的学习中会实现这个饼~

找工作

大三下学期结束,即将走向社会。也开始了人生中第一次准备找工作、投简历以及准备一系列的面试。

准备阶段

简历

一份精心排版和设计的简历能购很好的抓住HR的眼球,我的简历就是采取Latex的简历模板,将自己的基本信息、联系方式(一个自己的博客很有可能成为加分项)、专业技能、项目经历等体现出来基本上就能收到不少面试通知,也许能直接获得部门负责人的直接联系。

海投简历

实习僧、BOSS、看准等招聘网站都挺靠谱的,除此之外,一些大公司还有自己的招聘网站,我就通过实习僧获得了一些面试的机会。还有校招、社招以及内推,我目前在埃森哲的工作就是同学的推荐,进行了简单的电话面试后,获得机会的,是最靠谱的方式了,还可以通过学长、老师等。

面试

比较有趣的是我的面试形式多种多样:SAP面对面面试、微博视频面试、Accenture电话面试。个人而言,线上的面试更为轻松,发挥也更加稳定,SAP准备了很多,一紧张脑子一片空白全都忘记了😥

面试问题

  1. Java基本数据类型:byte、short、int、long、float、double、char、boolean
  2. IDE:eclipse debug常用快捷键(F5:下一步,可以进入下一个函数栈。F6:当前函数的下一步,不会进入其他的函数。F8:下一个断点。)
  3. 数据结构:二叉树(红黑树、二叉查找树)、数组与链表的区别(数组:地址连续、不利于扩展、随机访问性强;链表:插入删除速度快、内存利用率高、查找效率低)
  4. 算法
  5. JVM的底层结构以及内存管理
  6. 内存管理:C/C++、Java的内存申请与释放函数
  7. 云部署:项目经历、部署经验
  8. 进程与线程:进程是资源分配的最小单位,线程是程序执行的最小单位。一个进程拥有一个或多个线程。线程的引入节省了进程间切换的开销(资源共享)。
  9. C/C++区别:C语言面向过程、C++面向对象,拥有封装性、继承性、多态性,是C语言的扩展。
  10. 对于我们公司你还有什么问题(这个我真不知道要问什么Orz)

面试技巧

放轻松!会的就好好回答、不会的也不要紧张,诚实地告诉面试官你不会,但是表明你愿意学习的态度,相信自己作为一名优秀的大学生,一定能拿到不少offer~

后续

成功入职后当然就是努力工作、踏实学习专业技能、提升自我水平、走向人生巅峰啦👌