记录下人生第一次投递简历,正规实习求职面试,以及前前后后的准备与遇到的问题。
个人总结:
大三在读,可在周一,周三,周五下午和周六全天投入实习;
熟悉JavaSE,Mysql,Jsp,Html,CSS等。了解SSM框架;在学SpringBoot和Android;
熟悉使用Office办公软件; 拥有良好的沟通和协调能力,能够融入集体;
教育经历:
XX大学 XXXXXX学院 软件工程
2018年09月 - 2022年06月
GPA:3.7/4.00(专业前25%)
专业课程:了解《数据结构》《数据库系统》《计算机网络》《算法设计与分析》《计算机操作系统》等课程知识。
项目经历:
第一学年本人带领团队,仿照淘宝APP中“查看物流”功能,基于GUI,Mysql实现了物流管理系统,可以指定查阅某个或某人的物流快递信息,也可以查看动态小车形成轨迹。荣获专业第三名。
第二学年本人带领团队,学习人民日报网排版,基于JavaWeb,制作项目365DayNews,实现了多网页的动态交互以及新闻信息的动态显示,获专业第四名。
社团组织经历:
担任XXXXXX学院,XXXXXX学院的中文演讲比赛评委,对90多位参赛选手做初步的筛选和点评。
协调武术协会和校外赞助商,获取充足的活动资金。
组织武术协会纳新,每周定期举行队员的基本功培训辅导及考核。
课余爱好:
口琴;传统武术;
数字海南:
大数据基础设施服务,数据处理与存储服务,信息技术咨询服务,计算机软件开发及信息系统集成服务,云平台服务,云应用服务,大数据相关增值服务,大数据挖掘分析服务,数据交易交换服务,互联网信息服务,互联网接入服务,信息技术及互联网服务,金融信息服务(从事互联网新闻信息服务、法定特许或者应予以备案的金融业务除外);增值电信业务服务;会议展览及相关服务:从事互联网文化产品的展览、比赛活动;基础软件服务;信息技术开发、信息技术转让、信息技术进出口;网络与信息安全软件开发;广告设计、制作及发布;货物进出口、进出口贸易;企业管理咨询;市场信息咨询与调查;通讯设备、网络设备销售及租赁等
——《百度百科——数字海南》
公司部分成就:
2020.2.18
发布“海南健康码”
2020.6.9
发布“码上办事平台”
2020.9.30
发布“椰省事2.0”
……
面试官好,我是EdwinD,现在是大三软件工程在读。大学两年中学过C语言,Java基础,Mysql的基本操作以及JavaWeb。目前在学一些框架,如SSM,SpringBoot,以及Android。疫情期间,为了夯实基础,自己在网上找资源和网课,复盘了一下之前的所学,同时开始分享更新自己的博客。目前是一共有七十余篇,共计上万的阅读量。这些博客是我自学的一个很强的动力。
大一和大二两个学期我们专业都有过组织整个年级进行组队项目实现的,项目内容主要是涵盖本学期或本学年学过的专业课知识,做出一个比较成型的产品出来。
两年中我都是担任项目小组长的职务,大一时我们的项目是基于GUI中的Swing和Mysql实现的一个物流管理系统,一共涉及到8个页面,主要功能是发送,接受,查阅物流信息以及查看动态的物流走向图。大一时荣获专业第三名。
大二时我们学习的是JavaWeb方面的知识,我们基于Html,Jsp和Css等,制作出一个动态交互页面365DayNews,涵盖了10余个国家的近百条新闻消息。荣获专业第四名。
以上是我的基本信息。
参考答案:
1.栈:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2.队列:
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
3.异同:
栈与队列的不同点:
1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
栈是LIFO(Last In First Out),先存进去的数据只能最后被取出来,进出顺序逆序,即先进后出,后进先出。
队列是FIFO(First In First Out),它保持进出顺序一致,即先进先出,后进后出。
2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。
3.顺序栈能够实现多栈空间共享,而顺序队列不能。
栈与队列的相同点:
1.都是线性结构。
2.插入操作都是限定在表尾进行。
3.都可以通过顺序结构和链式结构实现。
4.插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。
5.多链栈和多链队列的管理模式可以相同。
参考链接:
数据结构之栈与队列
栈与队列的异同
参考答案:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
参考答案:
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS协议是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
反思:
这里由于面试官提问了一个我不清楚的知识点,但是我是有复习“三次握手”和“四次挥手”的,其实应该朝着自己复习过的方面进行主动反击,占领面试的主动权,而不是被动地回答提问的问题。
这个项目是我们大一的时候做的,技术支持为Java中GUI的Swing以及Mysql。
大约做了5个界面左右,从登录,用户发送快递,用户接受快递,用户查询快递管理员也具备上述的代理发送,接受以及查询的功能。
发送,接受以及查询快递均是用Swing和Mysql建立连接后,进行数据库的增删改查所实现的。
查看物流里有物流的实时动态图,是我们基于GUI的Panel和画笔进行实现的。
(用户注册,发货价格打折,等功能忘记提及了……)
用户表格,管理员表格,货物表,地址表格。
用户表设计用户基本信息,姓名,ID,密码,住址,手机号等。信息源自用户注册的时候的信息输入,用户向JTextFiled输入框中输入的信息内容,同时键盘和鼠标的监听事件,会提示信息格式是否正确。
管理员表是管理员的基本信息,管理员具有用户的所有基本功能的同时,还可以无条件地进行用户无法操作的删除等功能。
货物表包含物流ID,出发城市,目标城市以及是否已接受等信息。
地址表格中包含了城市名,城市的X,和Y的坐标,用于在我们的Panel上画出货物在两个城市之间的动态物流交互的效果。
有的货物ID号就是我们的订单号,我们的订单识别条件。我们的一个订单中可以包含多个物品,比如说牛奶,面包等,都属于食品类,可以统一打包发走,同时我们还有一个价格方面的优惠,像是天猫双十一货物打折,我们是运输费用打折等。
1.普通用户根据自己的身份ID可以查阅到自己名下的所有包裹信息:货物单号,货物内容,货物出发城市,目标抵达城市,货物价格,是否送达等。
2.管理员除了普通用户看到的之外,还可以看到用户的个人基本信息,发件人的姓名,ID,手机号,常用住址等,收件人的信息当然也可以。
没有了,只是设计了这两种。
当时组员一共有5人,我是小组长,主要负责协调工作,分发任务,当然我也写了一部分的网页。我们5个人一共实现了10个国家近百条新闻的效果输出。
我们当时学过之后,把文本框,图片等内容,借用CSS的格式模板,填充在了Html中,向用户展示的有总页面和每个国家的新闻页面。
从任何一个页面都可以跳转到其他国家的总页面和登陆页面。还有用户登录后可以进行点赞收藏等小功能。
后期我们打算把网页格式固定下来,内容实现从数据库中抽取调用,然后导入到网页模板中。
当时还是Html多一些。
是的,我们每个人都分工了一部分项目内容的。
你猜猜~
参考答案:
0、百科:
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
1、Redis介绍
开源:早起版本2w3千行
基于键值对的存储系统:字典形式
多种数据结构:字符串,hash,列表,集合,有序集合
高性能,功能丰富
使用的公司有:github,twitter,stackoverflow,阿里,百度,微博,美团,搜狐
2、8个特性:
(1)速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型
(2)持久化:rdb和aof
(3)多种数据结构:
5大数据结构
BitMaps位图:布隆过滤器 本质是 字符串
HyperLogLog:超小内存唯一值计数,12kb HyperLogLog 本质是 字符串
GEO:地理信息定位 本质是有序集合
(4)支持多种编程语言:基于tcp通信协议,各大编程语言都支持
(5)功能丰富:发布订阅(消息) Lua脚本,事务(pipeline)
(6)简单:源代码几万行,不依赖外部库
(7)主从复制:主服务器和从服务器,主服务器可以同步到从服务器中
(8)高可用和分布式:
2.8版本以后使用redis-sentinel支持高可用
3.0版本以后支持分布式
3、典型使用场景
缓存系统:使用最广泛的就是缓存
计数器:网站访问量,转发量,评论数(文章转发,商品销量,单线程模型,不会出现并发问题)
消息队列:发布订阅,阻塞队列实现(简单的分布式,blpop:阻塞队列,生产者消费者)
排行榜:有序集合(阅读排行,点赞排行,推荐(销量高的,推荐))
社交网络:很多特效跟社交网络匹配,粉丝数,关注数
实时系统:垃圾邮件处理系统,布隆过滤器
参考链接:
Redis基础
百度百科
参考答案:
1、概述
Hibernate和Mybatis是当前流行的ORM框架。Hibernate对数据库结构提供了较为完整的封装。mybatis主要着力点在于java对象与SQL之间的映射关系。
2、Hibernate理解
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将java对象与数据库表建立映射关系,是一个全自动的orm框架。
Hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。我们从三个角度理解一下Hibernate:
(1)Hibernate是对JDBC进一步封装
原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。
(2)从分层的角度来看
我们知道非常典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,NHibernate,JDO,OJB,EJB等等。
(3)Hibernate是开源的一个ORM(对象关系映射)框架
ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
简单来说,Hibernate就是将对象数据保存到数据库,将数据库数据读入到对象中。
(图片源自博客,侵权则删)
3、总结
(1)两者相同点
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
(2)两者不同点
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。而MyBatis在使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
(3)举个形象的比喻
MyBatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。(小巧、方便、高效、简单、直接、半自动)
Hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以摆脱他了,但仅限于它能做的事。(强大、方便、高效、复杂、绕弯子、全自动)
参考链接:MyBatis与Hibernate区别
题干:
参考答案:
1.概念
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
2.介绍
** 意图**:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
关键代码:创建过程在其子类执行。
应用实例 :1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。
优点 :1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
使用场景 :1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。
注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
参考链接:菜鸟教程
现场回答:
不晓得太多,有听说过……
参考答案:
1.引言
什么是泛化呢?
先举个栗子:
小明和小李都上了高三。小明头脑机灵,一边刷着五年高考三年模拟一边总结做题规律,而小李一门心思刷题,一套完了又一套,刷的试卷堆成山了却没有对错题进行总结。高考结束成绩公布,小明超出一本线几十分,而小李却勉强上了二本线。这是为什么呢?
原来高考试题一般是新题,谁也没做过,平时的刷题就是为了掌握试题的规律,能够举一反三、学以致用,这样面对新题时也能从容应对。这种对规律的掌握便是泛化能力。
在这个例子中,小明善于总结做题规律,可以说是他的泛化能力好;而小李只知道刷题却没有掌握做题规律,可以说是他的泛化能力差。
2.泛化的定义
机器学习(深度学习)的根本问题是优化和泛化之间的对立。
优化(optimization)是指调节模型以在训练数据上得到最佳性能(即机器学习中的学习),而泛化(generalization)是指训练好的模型在前所未见的数据上的性能好坏。
机器学习的目的当然是得到良好的泛化,但你无法控制泛化,只能基于训练数据调节模型。
对泛化能力可以从以下六个方面来理解:
泛化能力最直接的定义是训练数据和真实数据间的差异,训练模型的目地是要模型在完全陌生的数据上进行测试的;
泛化能力还可以看成模型的稀疏性。正如奥卡姆的剪刀指出的,面对不同的解释时,最简单的解释是最好的解释。在机器学习中,具有泛化能力的模型中应该有很多参数是接近0的。而在深度学习中,则是待优化的矩阵应该对稀疏性有偏好性。
泛化能力的第三种解释是生成模型中的高保真能力。具有泛化能力的模型应在其每个抽象层次具有重构特征的能力。
第四种解释是模型能够有效的忽视琐碎的特征,或者说在无关的变化下都能找到相同的特征。
泛化能力还可以看成模型的信息压缩能力。
这里涉及到解释为什么深度学习有效的一种假说,信息瓶颈(information bottleneck),说的是一个模型对特征进行压缩(降维)的能力越强,其就越更大的可能性做出准确的分类。信息压缩能力可以概括上述的四种关于泛化能力的解释,稀疏的模型因其结构而完成了信息的压缩,生成能力强,泛化误差低的模型因信息压缩而可能,而忽略无关特征是信息压缩的副产品。
理解泛化能力的最后一种角度是风险最小化。
这是从博弈论的角度来看,泛化能力强的模型能尽可能降低自己在真实环境中遇到意外的风险,因此会在内部产生对未知特征的预警机制,并提前做好应对预案。这是一种很抽象的也不那么精确的解释,但随着技术的进步,人们会找出在该解释下进行模型泛化能力的量化评价方法。
参考链接:深入理解泛化
我:简述了自己身边有同学在实习,他们在实习中都收获了很多的东西,以及学习的驱动力和能力提升都是很快的。很希望有这个机会去摆脱课本上的死知识,能有机会去学习如何学以致用。
技术面试官:的确,我们这边是偏向于工作和实际应用方面的,课本上的东西和实际生活中的还是有不小的差别的。但是,理论是实践的基础,没有基础的支持,也是很难迈出实际操作那一步的。
我:简述自己通过博客,Github进行学习的方式。
技术面试官:讲一下你都是怎么用Github的?
我:……
时间的利用。
寒假实习,下学期课程继续扎实基本功等,为大四找工作就业做准备。
参考正解:突出计划的内容,考虑阶段性,目标性相结合。将自己为入职,实习等做的准备巧妙地融入自己的计划中去,讲出来。
我了解到咱们有做一个一码通,我本人也是一个手机发烧友,现在在学Java和Android,希望以后可以在这个方面进行专攻一下。
参考正解:在上一个问题如果能够比较清晰地讲解自己的学习计划以及实习是自己计划中的一部分,顺便说一下自己所作出的努y力等,会是一个很加分的项,同时估计这个问题也就不会再被问到了。
我还投递了海南XX网络有限公司,由于他们暂时只招收全职的实习生,一周至少y
回去等通知就好了。
时间主要会看你的课余时间安排,总时长至少2个月左右。
先会带你认识我们公司在做一些什么,等你熟悉了大致的工作方向后,我们带你了解我们的工作脚手架之类的,代码规范等,当然不会只让你看,会带你上手操作的,毕竟只看不做,难以掌握,skr~
当然,等你入职后我们会拉你进入我们的内部分享群嘛,大家都会在群里分享自己觉得比较好的资源啊,包括一些工具之类的,很多问题也会相互之间讨论交流。
《数据结构》和《算法分析与设计》都是我们程序猿的基本功,是我们编程最基础的东西,包括《计算机与网络》的一些知识。课本里的东西,回去希望你继续扎实地掌握一下。
代码的话,其实一方面看自己的兴趣,另一方面有机会多去锻炼也是。代码这个东西都是熟能生巧的。以后有机会慢慢地去掌握了解。
校招生的能力毕竟还是有限的,企业更加看重的是校招生的学习能力以及态度等,当然有一些项目经历,能够说出个花儿来是更好的。不仅仅是校招生,社会招聘进入的(王哥)也有不少知识是在入职后才开始学习职业相关方面的知识的。
项目经历的确是必不可少的,但是如果没有跟着老师或者学长学姐走过项目经历的话,除了自己的期末项目之外,可以去网上找一些开源项目,看懂吃透,理解了之后,项目里是知识,就变成了自己的。在面试的时候,这些是你能讲出来一些东西,就是你的。
面试结果在第二天的晚上出来了,本次面试一共提供了5个岗位,每个岗位招募1名成员。虽然没能被选上,没有得到这次宝贵的实习机会。但是整个面试的过程,以及回来后和老师,同学们之间对于这次实习的交流,都使我获益匪浅。我会继续努力的。
在此特别:
感谢数字海南提供的宝贵实习面试机会。
感谢任老师提供的实习面试消息与推荐。
感谢东和兰抽时间陪我去面试,一路上给我加油打气,教我很多面试小技巧。
感谢海在面试前后的知识分享,提问检测与帮助。
感谢厚对于面试的指导和建议。
感谢恒在我写总结时帮我理清的问题和解决方案。
感谢龙的睡前的安慰和事后分析。
感谢爽的支持与陪伴。
百度百科
菜鸟教程
数据结构之栈与队列
栈与队列的异同
Redis基础
MyBatis与Hibernate区别
深入理解泛化
2020-12-9