1.自我介绍
答:面试官,您好!我叫xxx,本科毕业于xxx大学软件工程专业,是一名2020届的应届生,来自xxx。大学期间我主修的课程有C语言,Java,软件项目管理等。在校期间参与过一个客户管理系统的开发,另外,自己学习过程中也写过一些系统比如一个网上商城系统,它是一个采用SOA结构,使用dobbo发布与获取服务的分布式项目。在学习之余,我比较喜欢通过博客整理分享自己所学知识。从网上看到贵公司的招聘信息,觉得自己比较适合公司的岗位,对自己的发展也有帮助,所以来这里争取下这份工作。以上就是我的自我介绍,谢谢面试官!
2.Java集合有哪些?
答:集合类型主要有3种:list,map,set,其中list和set都是继承自Collection接口,map不是。
list(有序,可存储重复元素)主要有ArrayList,LinkedList,Vector,Stack。ArrayList线程不安全,效率高,底层是由数组实现,查找快但是增删慢;LinkedList底层是由链表实现,线程不安全,效率高,查找慢但是增删快;Vector是线程安全的,底层由数组实现,Stack是Vector的实现类,多了push等方法。
set(无序,不能存储重复元素)主要有HashSet,TreeSet,LinkedHashSet。HashSet使用hash表存储元素,通过hashCode方法和equals方法来保证元素的唯一性;TreeSet底层由二叉树实现;LinkedHashSet会保存插入顺序,由链表维护。
map(双列集合)主要有HashMap,HashTable,TreeMap。HashMap是线程不同步的,效率较高,key不允许重复,无序可以存储null键null值,但只能存储一个null键,jdk1.8之前底层是由数组加链表实现的,jdk1.8之后当链表长度大于阈值(默认为8)时,将链表转为红黑树;HashTable线程同步,效率低,不允许存储null键null值;TreeMap采用一种被称为“红黑树”的排序二叉树来保存Map中的的每个Entry,并进行排序。
3.arraylist和linkedlist区别?
答:答案在上题已给出
4.stringbuilder和stringbuffer的区别?
答:StringBuilder和String Buffer都是继承自AbstractStringBuilder类,StringBuilder是线程不安全的,所以效率较快,但是相对于String Buffer来讲性能提升的不大,只有10%~15%,StringBuffer是线程安全的,所以效率较慢,操作少量数据时使用String,单线程操作字符缓冲区下大量数据时使用StringBuilder,多线程操作字符缓冲区下大量数据时使用StringBuffer。
5.多线程的实现方式,你最常用那种?
答:线程的实现方式有四种,继承Thread类,实现runnable接口,实现callable接口,使用线程池创建。继承Thread类使用的较少,因为Java是单继承的,如果继承Thread类就不能再继承其他类,具有局限性,runnable和callable的区别在于runnable接口不会返回结果,但是callable接口会返回结果。通过线程池创建可以对线程进行管理,避免频繁的创建和销毁线程造成大量系统资源的浪费,增加并发编程的风险。
6.wait()和sleep()的区别
答:wait()是Object类中的一个方法,sleep()是Thread类中的一个方法;wait会释放对象锁,而sleep不会释放对象锁;wait只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用;sleep必须捕获异常,而wait不用;wait可以通过notify()方法进入运行状态。
7.io中字节流和字符流的区别,为什么还要用字符流?
答:字节流和字符流都是流的一种划分,两类都分为输入和输出操作。
①字节流中输入数据是使用InputStream来完成,输出数据时使用OutputStream来完成;字符流中输入数据是使用Reader来完成,输出使 用Writer来完成,他们都是抽象类。
②字节流处理单元为一个字节,处理字节和字节数组;而字符流处理单元为两个字节的Unicode字符,操作字符,字符数组和字符串。
③字节流可以处理所有数据类型,而字符流只能处理字符数据。如果是音频,图片等文件,最好使用字节流,如果是纯文本数据,最好使用字符流,因为字节流不能直接处理Unicode字符。
8.简单介绍一下redis
答:redis是一个非关系型数据库,他的数据是存在内存之中的,所以读写速度非常快,因此redis被广泛应用于缓存方向。另外,redis也经常用来做分布式锁,redis提供了多种数据类型(String、hash、list、set、sorted set)来支持不同的业务场景,此外redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。
9.介绍一下spring
答:它是一个全面的、企业应用开发一站式的解决方案,是一个轻量级的,非侵入性的框架,可以和其他的框架无缝整合,贯穿表现层、业务层、持久层。它具有以下几大特征:控制反转(IOC):IOC的初始化过程:XML读取resource解析BeanDefinition注册BeanFactory。Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化Bean 并建立 Bean 之间的依赖关系。
依赖注入(DI):依赖注入,是一个技术实现,一个对象可以提供另一个对象的依赖。比如利用组合关系引入另外的对象,其实就是依赖注入。Spring框架拥有一个IoC容器,负责对象创建,装配,配置,管理整个生命周期,直到完全销毁。IoC容器通过依赖注入,也就是DI管理beans。
面向切面(AOP):所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用"横切"技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。AOP 主要应用场景有:Authentication 权限,Caching 缓存,Context passing 内容传递,Error handling 错误处理,Lazy loading 懒加载,Debugging 调试,logging, tracing, profiling and monitoring 记录跟踪、优化、校准,Performance optimization 性能优化, Persistence 持久化,Resource pooling 资源池,Synchronization 同步,Transactions 事务。
10.介绍一下springmvc的处理过程
答:第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找
第三步:找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
第五步:处理器适配器去执行Handler
第六步:Handler执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器像前端控制器返回View
第十步:前端控制器对视图进行渲染
第十一步:前端控制器向用户响应结果


11.mybatis中#{}和${}的区别。
答: ${} 是直接拼成字符串的 ,#{} 是生成 ?占位符的,所以#{}可以防止sql注入。 ${} 每次传值不同 SQL 语句不同,可以灵活生成 SQL,但每次都需要进行预编译,对效率会有影响。使用模糊查询的时候只能使用’% ${value}%'或#{。。。}。
12.前后端交互你使用什么方式?
答:①利用cookie对象②利用session对象③利用request请求转发,设置setAttribute④利用Ajax进行异步数据请求(得到的数据可以以json或xml格式返回,便于处理)
13.介绍一下ajax及他的优点
答:ajax是一种创建交互式网页应用的网页开发技术。
ajax的优点:通过异步模式,提升了用户体验;优化了浏览器和服务器的传输,减少了不必要的数据往返,减少了带宽占用;ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载;ajax最大的特点是可以实现局部刷新,在不更新整个页面的情况下维护数据,提升用户体验。
14.转发和重定向的区别
答:转发是服务器的行为,request.服务器通过客户端传入的信息去读取目标资源,所以客户端并不知道目标资源的地址,因此浏览器的地址并不会改变。
重定向是客户端行为,是指客户端重新去向目标资源地址请求资源,浏览器中地址栏的地址会改变。一般来说转发的性能优于重定向,一般用转发进行登录操作的页面跳转,用重定向进行登出操作的页面跳转,若是进行两个服务器之间的跳转则必须用重定向。
15.get和post的区别
答:①get提交的参数会附在URL之后,以?分割URL和传输数据,参数之间以&相连。
②get方式提交数据存储大小最多不能超过1024个字节,这主要是因为受URL长度限制;post理论上是没有限制的,可传较大量的数据,但其实这样说是错误的,不准确的。
③post安全性要比get高。比如如果通过get方式进行登陆操作,那么用户名和密码将明文出现在url上。
16.简单介绍一下你的项目。
答:惠亿网上商城是一个综合性的 B2C 平台,类似京东商城、天猫商城。会员可以在商城浏览商品、下订单,以及参加各种活动。惠亿商城采用分布式系统架构,子系统之间都是通过dubbo调用服务来实现系统之间的通信,使用nginx实现负载均衡及反向代理,使用activemq作为消息中间件,为了提高网页加载的性能,在前台商品详情页面使用了freemarker实现了网页静态化。为了提高系统的性能使用redis做系统缓存,并使用redis实现session共享。为了保证redis的性能搭建了redis集群。搜索功能使用solrCloud做搜索引擎。
17.jsp的四大域对象
答:request,session,application,pagecontext。
18.mysql数据库的存储过程
答:存储过程就是为以后的使用而保存的一条或者多条MySQL语句的集合,可将其视为批处理文件。
①.为什么使用存储过程?
(1).通过把处理封装在容易使用的单元中 ,简化复杂的操作。简单
(2).由于不要求反复建立一系列的处理步骤,这保证了数据的完整性。防止步骤多而出现的错误。安全
(3).简化对变动的管理,如果表名,列名或者其他的内容需要更改直接改存储过程就可以了,别人甚至不需要直到里面的内容。
(4).提高性能,因为存储过程比单独执行的SQL语句执行的要快。高性能
②.存储过程的缺陷?
(1).一般来说,存储过程的编写更加复杂,需要更高的技能。更丰富的经验。
(2).普通用户没有存储过程的安全访问权限,需要管理员进行设置创建存储过程的权限,允许用户使用存储过程,而不是创建存储过程。
③.如何执行存储过程?
执行的语句是CALL,示例:
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
其中,执行的是名为producpricing的存储过程;计算并返回价格的最高,最低和平均值。可以显示结果,也可以不显示结果。
④.如何创建存储过程?
示例:
CREATE PROCEDURE productpricing() //括号里如果有参数可以列出;
BEGIN //这是存储过程的主体,由一个select语句构成;
SELECT Avg(prod_price) AS priceaverage
FROM products;
END;
⑤.如何删除存储过程?
执行下列语句:DROP PROCEDURE productpricing;
注意 :所有的MySQL变量都以@开头。
7.显示所有的存储过程信息。
SHOW CREATE PROCEDURE ordertotal;
19.数据库的优化
答:①当只要一行数据时使用limit 1。查询时如果已知会得到一条数据,这种情况下加上limit 1会增加性能,因为MySQL数据库引擎会在找到一条结果停止搜索,而不是继续查询下一条是否符合标准直到所有记录查询完毕。
②选择正确的存储引擎。
③用 not exists代替not in。not exists用到了连接,能够发挥已经建好的索引的作用,not in不能使用索引。
④对操作符的优化,尽量不采用不利于索引的操作符,如:in, not in, is null, is not null, <>等若某个字段总要拿来搜索,为其建立索引。
⑤查询语句不要使用select*,应该将字段列取出来,因为select* 会造成资源浪费,如果表的结构在以后发生了改变,那么SELECT* 语句可能会取到不正确的数据甚至是出错。并且使用SELECT* 语句将不会使用到覆盖索引,不利于查询的性能优化。
如:使数据库进行分片,读写分离,创建索引,使用查询语句时尽量不要使用select*,如果数据库中某个表中某个字段存储的数值太大,并且很多时候都用不到这个字段,那么就可以将这个字段单独拆分为一个表。
20.线程启动是run方法还是start方法?
答:是start方法。Thread通过start方法来启动一个线程,线程处于就绪状态,run方法使其进入运行状态。
21.session和cookie的区别
答:cookie是web服务器发送给浏览器的一块信息,浏览器会在本地的一个文件夹中给每个web服务器存储cookie以后浏览器再给web服务器发送请求时,同时会发送所有为该服务器存储的cookie,而session是存储在web服务器的一块信息。客户端不能禁用session但可以禁用cookie。在存储数据方面,session可以存储任意的Java对象,而cookie只能存储string类型的对象。
22.list和set的区别,及有序是指什么有序?
答:list集合是有序的并且可以存储重复元素,set集合是无序的,不能存储重复元素。有序是指存储元素的下标是有序的,比如第一个元素下标对应0,第二个元素下标对应等。
23.谈谈你对JVM的理解。
答:JVM是Java Virual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,他是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改的运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。
24.介绍一下登录功能的实现。
答:首先,前台需要进行用户名密码的非空及是否合法的校验,这样可以减轻数据库的压力,并且提升用户体验,然后再将输入框中的用户名和密码传入后台,再查询数据库中是否存在该用户名,若不存在,返回错误信息给前台页面,若存在再验证密码是否正确,如果正确生成token,并将用户信息写入redis,如果登录成功将token写入cookie中。
25.什么是反射?
答:在运行状态中,对于任意一个类,可以获取它所有属性和方法;对于任意一个对象,都能调用它的任意一个属性或方法。这种在运行时动态地获取信息,调用对象属性和方法的功能,就是反射机制。

总结

由于第一次面试,太过紧张,连自我介绍都没准备好,许多自己明明理解的知识由于当时脑子短路也没回答上来。整体答对率大概只有百分之五十。所以这次面试的自我感觉也很是糟糕,不过好在积累了经验,总体来说还是很开心的!(注:以上回答是面试完自己冷静下来后手写给出的回答,并不保证完全正确!)

面试记录之上海某一家公司(包含面试官所提到的问题及回答)相关推荐

  1. 面试记录之江西某一家公司

    首先,进行自我介绍 - 接着问一些技术相关的问题: 1.java和c语言有什么区别? 答:java是面向对象的,c语言是面向过程的. ①c语言不是面向对象的,而是面向过程,而JAVA是面向对象的语言. ...

  2. Interview:算法岗位面试—11.07早上上海某机器人公司(上市)面试之项目考察、比赛考察、图像算法的考察等

    Interview:算法岗位面试-11.07早上上海某机器人公司(上市)面试之项目考察.比赛考察.图像算法的考察等 导读:该公司是国内做机器人领域的Top5公司,邀约的早9点.去了之后,一位美女HR和 ...

  3. 上海某软件公司电话面试分享

    前段时间在猎聘网上面投了几家公司的简历,结果没过多久就有一家公司叫我准备电话面试了,其中一家就是XX软件公司的面试了.今天下午从3点讲到4点.说句实话,今天长沙这边是下雨天,有点冷,为了找一个方便的地 ...

  4. 华为OD面试【前】经验分享,包含面试准备的各个细节

    文章目录 核心的华为 OD 机试 了解华为 OD 职位和要求 什么是华为 OD 以及 OD 岗位分类 华为 OD 相关岗位都需要哪些技能和经验 为什么要申请 OD 职位 准备简历和面试材料 简历的重点 ...

  5. 阅文java面试_【上海阅文集团Java面试】阅文后端Java,二轮技术一轮HR-看准网

    一面: 1.问项目,介绍一下,几个人做的,你做的哪部分. 2.jvm内存模型. 3.几种jvm垃圾回收算法介绍一下,minorGC发生在什么时候. 4.复制算法详细介绍一下. 5.对象什么时候会进入老 ...

  6. Java面试总结,上海银行2021春招面试开始了吗

    1 JVM的内存区域布局 java代码的执行步骤有三点 java源码文件->编译器->字节码文件 字节码文件->JVM->机器码 机器码->系统CPU执行 JVM执行的字 ...

  7. 压力面试问题——当你和好友,同一天同一家公司面试同一个岗位,你更希望谁入选?3种回答方式解析|智测优聘总结

    听说过"压力面试"吗? 很多企业都喜欢用压力面试来测试应聘者的心理素质.今天,人才初筛招聘网智测优聘针对其中一个非常有代表性的问题:「当你和你的好朋友,同一天进入同一家公司,面试同 ...

  8. 简单记录下几家公司的面试经历(Java一年经验)

    一年经验,记录下最近几家公司的面试经历. 1.深圳缇铭科技有限公司 1)先让自我介绍,讲一下最近的项目 根据项目提问,比如: redis你是如何部署的?你的code是直接套用他们的模板去编写,还是自己 ...

  9. 2017-08-03 面试记录(铃声多多)

    2017-08-03 面试记录(铃声多多) 公司:北京多宝灵动科技有限公司(铃声多多) 成立时间:2012 类型:创业公司 地址:北京市海淀区学清路甲38号10层1008室(地铁六道口站B口金码大厦1 ...

最新文章

  1. NET::ERR_CACHE_MISS
  2. 每日一皮:不允许穿格子衫之后...
  3. 信号量与条件变量的区别
  4. 如何linux查看硬盘文件,如何使用linux 指令查看硬盘
  5. html背景图片自适应纵向,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
  6. 计算机二级学习考试题,全国计算机等级考试一级Window复习题及答案
  7. Linux主机名那点事儿
  8. Spring 3.1:缓存和EhCache
  9. 【APICloud系列|14】xcode下载地址
  10. python中空字符串的布尔值是什么_Python的布尔值与空值
  11. cocos2dx-3.2 运行第一个android程序
  12. 【Vue】—Vue的基本介绍与插件安装
  13. python动态变量名以及调用_Python 动态变量名与调用介绍
  14. Mybatis-generator自动生成
  15. 哪款scrm系统性价比更高?更受企业的欢迎?
  16. linux .cache目录,关于linux系统下的cache Memory
  17. aix系统日志转存日志服务器,AIX查看系统日志
  18. php使用nltk,mac 安装nltk, 并解决nltk.download()出错问题
  19. 【C语言】数字直角三角形,数字矩阵,蛇形数组
  20. win10家庭版解决“管理员已阻止你运行此应用”

热门文章

  1. 转转和闲鱼哪个流量大?哪个用户多?
  2. css设置背景图片样式
  3. VSCode 设置 HTML 属性自动换行
  4. 让 Web3 认证拥有和 Web2 一样丝滑体验的技术路径
  5. java 匹配url的正则表达式_java匹配url的正则表达式
  6. POJ | 1017装箱问题 摸鱼题解
  7. Cannot generate variable name for non-typed Collection parameter type
  8. 【原创】吉他指板音名训练器 Guitar Tone Trainer
  9. 怎样设置电脑允许远程桌面连接
  10. 博客配置又拍云CDN