JAVA面经

2021/8/29 9:06:21

本文主要是介绍JAVA面经,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1,之前公司做过什么项目,用过什么技术
2,REDIS做秒杀,怎么判断最后一件商品,如果有两人同时购买如何处理
3,之前如的项目中,有哪些是你觉得比较难解决的问题,都 是怎么处理的
4,SPRINGBOOT启动过程经历了什么,先启动什么再启动什么
有以下特点:

创建独立的Spring应用程序
嵌入的Tomcat,无需部署WAR文件
简化Maven配置
自动配置Spring
提供生产就绪型功能,如指标,健康检查和外部配置
下面我们从源码的级别来探究spring boot框架的启动原理,让我们从启动过程上去理解spring boot如何通过启动来获得强大的特性的。

启动概况
概述下主要的启动过程就是

初始化环境
初始化默认配置
初始化各类监听器、事件
创建上下文
在上下文中添加默认的bean
扫描文件、注解等各种类型的bean添加在上下文中
实例化各个bean
启动完毕
1、SpringApplication.run 标识spring的初始执行
接下来是SpringApplication的run方法
创建应用上下文
context = createApplicationContext();
准备异常报告器
getSpringFactoriesInstances方法
这个方法会尝试从类路径的META-INF/spring.factories处读取相应配置文件,然后进行遍历,读取配置文件中Key为:org.springframework.context.ApplicationContextInitializer的value。以spring-boot-autoconfigure这个包为例,它的META-INF/spring.factories部分定义如下所示:
准备应用上下文
prepareContext(context,environment,listeners,applicationArguments,printedBanner);
刷新应用上下文
这一步很重要,bean的注册,还有web容器都会在这里进行。
refreshContext(context);
接着通过工厂类TomcatServletWebServerFactory创建了WebServer
接下来,在创建TomcatWebServer的过程中,会对tomcat容器进行初始化,并启动servlet容器,开启web服务。

TomcatWebServer类是用来控制tomcat的,可以对web容器进行初始化。
在上述的代码中创建TomcatWebServer的过程中会调用initialize();
在初始化的方法中,this.tomcat.start(); 对tomcat容易进行启动,这也就是spring boot实现web容器如tomcat嵌入到自己的服务。
然后在start的过程中会调用
最后调用tomcat内部的启动方法,开启socket监听服务,实现web容器的启动。

 

 


5,设计模式有哪几种,平时做项目时多用的哪种设计模式
 工厂方法模式(Factory Method Pattern)
 抽象工厂模式(Abstract Factory Pattern)
 建造者模式(Builder Pattern)
 原型模式(Prototype Pattern)
 单例模式(Singleton Pattern)


一面
equals和==的区别
==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
==指引用是否相同, equals()指的是值是否相同
什么是继承,多态
继承,子类继承父类中所以的属性和方法,但是对于private的属相和方法,由于这个是父类的隐私,所以子类虽然是继承了,但是没有可以访问这些属性和方法的引用,所以相当于没有继承到。很多时候,可以理解为,没有继承。

多态:就是父类引用可以持有子类对象。这时候只能调用父类中的方法,而子类中特有方法是无法访问的,因为这个时候(编译时)你把他看作父类对象的原因,但是到了运行的时候,编译器就会发现这个父类引用中原来是一个子类的对像,所以如果父类和子类中有相同的方法时,调用的会是子类中的方法,而不是父类的。
线程
MAP SET LIST的区别
1. List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,例如通过list.get(i)方法来获取集合中的元素;
2. Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;
3. Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如 Tree Set 类,可以按照默认顺序,也可以通过实现 Java.util.Comparator< Type >接口来自定义排序方式。

什么是映射,有用过什么关于映射的项目
映射简称ORMapping
说的直白点就是这样:
对象在数据库里面保存的状态
比如:把某对象映射到库里,就是指把对象存储到数据库里
大概就是这个意思
如果想了解的更多.,你可以搜索 一些相关的知识
常用的JAVA映射工具如:Hibernate就是我们用的最流行的

mysqL怎么去重
使用distinct去掉多余的重复记录 利用group by
mysql索引有哪几种
MySQL索引包括普通索引、唯一索引、全文索引、单列索引、多列索引、空间索引

1、普通索引

即不应用任何限制条件的索引,该索引可以在任何数据类型中创建。字段本身的约束条件可以判断其值是否为空或唯一。

2、唯一索引

使用UNIQUE参数可以设置唯一索引。创建该索引时,索引的值必须唯一。主键是一种特殊唯一索引。

3、全文索引

使用FULLTEXT参数可以设置全文索引。全文索引只能创建在CHAR、VARCHAR、TEXT类型的字段上。查询数据量较大的字符串类型字段时,使用全文索引可以提高查询速度。注意:全文索引在默认情况下是对大小写字母不敏感的,可以通过使用二进制对索引的列进行排序以执行大小写敏感的全文索引。MySQL中只有MyISAM存储引擎支持全文索引

4、单列索引

顾名思义,单列索引值对应一个字段的索引。可以包括上述的三种索引方式。应用该索引的条件只需要保证该索引值对应一个字段即可。

5、多列索引

多列索引是在表的多个字段上创建一个索引。该索引只想创建时对应的多个字段,可以通过这几个字段进行查询。要想应用该索引,用户必须使用这些字段中的第一个字段。

6、空间索引

使用SPATIAL参数可以设置控件索引。控件索引只能建立在控件数据类型(LINESTRING、POINT、GEOMETRY等)上,这样可以提高系统获取控件数据的效率。MySQL中只有MyISAM存储引擎支持空间索引,且该字段不能为空值。
唯一索引和主键索引有什么不同
①.主键是一种约束,唯一索引是一种索引;
②.一张表只能有一个主键,但可以创建多个唯一索引;
③.主键创建后一定包含一个唯一索引,唯一索引并一定是主键;
④.主键不能为null,唯一索引可以为null;
⑤.主键可以做为外键,唯一索引不行;

in和exite的区别 哪个有索引 in里传的值有没有限制
in()适合B表比A表数据小的情况
exists()适合B表比A表数据大的情况
当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.
MySql 数据库:无限制;只是限制了sql语句的大小;

Oracle数据库:9i(256) 10g(1000)
Java 中,如果查询的sql 语句中,in 的选项数大于 1000 时,对集合进行分割的方法:

linux常用的指令 至少8种
20、time命令 19、gcc命令 18、vim命令 16、chmod命令 15、chown命令 14、chgrp命令 13、cat命令 12、tar命令 11、file命令 10、killall命令 9、kill命令 8、ps命令 7、rm命令 6、mv命令 5、cp命令 4、find命令 3、grep命令 2、ls命令 1、cd命令 touch date grep whereis ifconfig wget 是从远程下载的工具:scp top crontab ps mkdir rmdir tar pwd

linux怎么使用命令行传文件
scp path/filename userName@sseverName:path
pscp -l root -pw Demo999( D:\admin\wjypc\static\index\js\lk\hold2.js 47.52.158.133:/home/wwwroot/www.huaerhui.net/static/index/js/lk/

mybatis 分页的方式有几种
一、原始切分 二、LIMIT关键字 三、RowBounds实现分页 四、MyBatis的Interceptor实现:实现复杂,需要明白MyBatis的实现
aop主要是用在哪方面
实现方式
动态代理,如果实现了Interface的,可以使用JDK里的Proxy、InvocationHandler来做。
动态代理未实现Interface的,可以用CGLib来直接操作完成。

AOP用在哪些方面?
用途很广泛,比如日志,权限,审计等。
主要用在声明式事务管理。

mybatis 怎么从oracle中取数据放入mysql

spring api怎么做规范

springboot怎么安装redis
POM.XML 依赖Redis包
设置配置文件application.properties
Redis缓存配置类
怎么使用redis
@Autowired
RedisUtils redisUtils;
@Test
public void setRedis() {
redisUtils.set("edu", "本科");
}

@Test
public void setUsersRedis() {
Users users = new Users();
users.setTname("huangm");
users.setSex("男");
users.setAge(30);
redisUtils.set("users", users);
}

@Test
public void setMap() {
Map<String, String> map = new HashMap<>();
map.put("name", "zhangs");
map.put("age", "30");
map.put("sex", "men");
map.put("edu", "本科");
redisUtils.setMap("map", map);
}

@Test
public void delete() {
redisUtils.delete("users","edu","map");
}

springboot的注解主要有哪些
Spring Boot中的常用注解有:@SpringBootApplication、@Repository、@Service、@RestController、@ResponseBody、@Component、@ComponentScan等等。下面本篇文章就来给大家介绍一下,希望对大家有所帮助。
在这里插入图片描述
1、@SpringBootApplication

这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

2、@EnableAutoConfiguration

允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。

如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。

@EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:

● 从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;

● 去重,并将exclude和excludeName属性携带的类排除;

● 过滤,将满足条件(@Conditional)的自动配置类返回;

3、@Configuration

用于定义配置类,指出该类是 Bean 配置的信息源,相当于传统的xml配置文件,一般加在主类上。如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

4、@ComponentScan

组件扫描。让spring Boot扫描到Configuration类并把它加入到程序上下文。

@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。

5、@Repository

用于标注数据访问组件,即DAO组件。

使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

6、@Service

一般用于修饰service层的组件

7、@RestController

用于标注控制层组件(如struts中的action),表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器;它是@Controller和@ResponseBody的合集。

8、@ResponseBody

表示该方法的返回结果直接写入HTTP response body中

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

9、@Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

10、@Bean

相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

11、@AutoWired

byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

当加上(required=false)时,就算找不到bean也不报错。

12、@Qualifier

当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用

13、@Resource(name=“name”,type=“type”)

没有括号内内容的话,默认byName。与@Autowired干类似的事。

14、@RequestMapping

RequestMapping是一个用来处理请求地址映射的注解;提供路由信息,负责URL到Controller中的具体函数的映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

15、@RequestParam

用在方法的参数前面。例:

@RequestParam String a =request.getParameter("a")。
1
16、@PathVariable

路径变量。参数与大括号里的名字一样要相同。例:

RequestMapping("user/get/mac/{macAddress}")

public String getByMacAddress(@PathVariable String macAddress){

  //do something;

17、@Profiles

Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。

任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。

@Configuration

@Profile("prod")

public class ProductionConfiguration {


9
18、@ConfigurationProperties

vue中v-if 和 v-show有什么区别
v-if 在条件切换时,会对标签进行适当的创建和销毁,而v-show则仅在初始化时加载一次,因此v-if的开销比v-show大
v-show控制的时元素的display属性,无论初始条件是否成立,都会渲染标签。而v-if是惰性的,只有在条件成立时才渲染为真实的标签,条件为假,不会去渲染标签

 


——————————————————————————————————————————————————————————————————————
前言
想进一线互联网大企业,辛辛苦苦过了笔试,然后面了技术一二三面,最后却败北HR面;实在可惜,也有点不值,对自己的辛苦付出不值。那么今天笔者就给大家分享70道HR面试题,帮你绕过那些HR面的坑!

为了能够在面试回答中优雅而不失体面回答面试考点,本文借鉴了不同平台对知识点的描述。

如有侵权请联系我
文章的不足和错误请指正,好的建议也不要吝啬,我都会采纳并更正
正文[HR面试题]
1. 请你自我介绍一下你自己
回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。

2. 你觉得你个性上最大的优点是什么?
回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在经过一段时间的培训及项目实战,加上实习工作,使我适合这份工作。我相信我能成功。

3. 说说你最大的缺点?
回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。

4. 你对加班的看法?
回答提示:实际上好多公司问这个问题,并不证明一定要加班。 只是想测试你是否愿意为公司奉献。

回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班
5. 你对薪资的要求?
回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。

回答样本①:“我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多
回答样本②:我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。
回答样本③:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。
6. 在五年的时间内,你的职业规划?
回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到。比较多的答案是“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与你的专业有相关背景的工作。要知道,考官总是喜欢有进取心的应聘者,此时如果说“不知道”,或许就会使你丧失一个好机会。最普通的回答应该是“我准备在技术领域有所作为”或“我希望能按照公司的管理思路发展”。

7. 你朋友对你的评价?
回答提示: 想从侧面了解一下你的性格及与人相处的问题。

回答样本①:“我的朋友都说我是一个可以信赖的人。因为,我一旦答应别人的事情,就一定会做到。如果我做不到,我就不会轻易许诺。
回答样本②:”我觉的我是一个比较随和的人,与不同的人都可以友好相处。在我与人相处时,我总是能站在别人的角度考虑问题“
8. 你还有什么问题要问吗?
回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没有问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。

9. 如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
回答提示:一段时间发现工作不适合我,有两种情况:

如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;
你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。
10. 在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?
回答提示:

原则上我会尊重和服从领导的工作安排;同时私底下找机会以请教的口吻,婉转地表达自己的想 法,看看领导是否能改变想法;
如果领导没有采纳我的建议,我也同样会按领导的要求认真地去完成这项工作;
还有一种情况,假如领导要求的方式违背原则,我会坚决提出反对意见;如领导仍固执己见,我会毫不犹豫地再向上级领导反映。
11. 如果你的工作出现失误,给本公司造成经济损失,你认为该怎么办?
回答提示:

我本意是为公司努力工作,如果造成经济损失,我认为首要的问题是想方设法去弥补或挽回经济损失。如果我无能力负责,希望单位帮助解决;
是责任问题。分清责任,各负其责,如果是我的责任,我甘愿受罚;如果是一个我负责的团队中别人的失误,也不能幸灾乐祸,作为一个团队,需要互相提携共同完成工作,安慰同事并且帮助同事查找原因总结经验。
总结经验教训,一个人的一生不可能不犯错误,重要的是能从自己的或者是别人的错误中吸取经验教训,并在今后的工作中避免发生同类的错误。检讨自己的工作方法、分析问题的深度和力度是否不够,以致出现了本可以避免的错误。
12. 如果你在这次考试中没有被录用,你怎么打算?
回答提示:现在的社会是一个竞争的社会,从这次面试中也可看出这一点,有竞争就必然有优劣,有成功必定就会有失败.往往成功的背后有许多的困难和挫折,如果这次失败了也仅仅是一次而已,只有经过经验经历的积累才能塑造出一个完全的成功者。我会从以下几个方面来正确看待这次失败:

第一:要敢于面对,面对这次失败不气馁,接受已经失去了这次机会就不会回头这个现实,从心理意志和精神上体现出对这次失败的抵抗力。要有自信,相信自己经历了这次之后经过努力一定能行.能够超越自我;
第二:善于反思,对于这次面试经验要认真总结,思考剖析,能够从自身的角度找差距。正确对待自己,实事求是地评价自己,辩证的看待自己的长短得失,做一个明白人;
第三:走出阴影,要克服这一次失败带给自己的心理压力,时刻牢记自己弱点,防患于未然,加强学习,提高自身素质;
第四:认真工作,回到原单位岗位上后,要实实在在、踏踏实实地工作,三十六行,行行出状元,争取在本岗位上做出一定的成绩;
第五:再接再厉,成为一名架构师一直是我的梦想,以后如果有机会我仍然后再次参加竞争。
13. 如果你做的一项工作受到上级领导的表扬,但你主管领导却说是他做的,你该怎样?
回答提示:我首先不会找那位上级领导说明这件事,我会主动找我的主管领导来沟通,因为沟通是解决人际关系的最好办法,但结果会有两种:

我的主管领导认识到自己的错误,我想我会视具体情况决定是否原谅他;
他更加变本加厉的来威胁我,那我会毫不犹豫地找我的上级领导反映此事,因为他这样做会造成负面影响,对今后的工作不利。
14. 谈谈你对跳槽的看法?
回答提示:

正常的"跳槽"能促进人才合理流动,应该支持;
频繁的跳槽对单位和个人双方都不利,应该反对。
15. 工作中你难以和同事、上司相处,你该怎么办?
回答提示:

我会服从领导的指挥,配合同事的工作。
我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要看看是不是为人处世方面做得不好。如果是这样的话 我会努力改正。
如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足。有问题就及时改正。
作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的!
16. 假设你在某单位工作,成绩比较突出,得到领导的肯定。但同时你发现同事们越来越孤立你,你怎么看这个问题?你准备怎么办?
回答提示:

成绩比较突出,得到领导的肯定是件好事情,以后更加努力
检讨一下自己是不是对工作的热心度超过同事间交往的热心了,加强同事间的交往及共同的兴趣爱好。
工作中,切勿伤害别人的自尊心
不再领导前拨弄是非
乐于助人对面
17. 你最近是否参加了培训课程?谈谈培训课程的内容。是公司资助还是自费参加?
回答提示:可以多谈谈自己学的技术。

18. 你对于我们公司了解多少?
回答提示:在去公司面试前上网查一下该公司主营业务。

如回答:贵公司有意改变策略,加强与国外大厂的OEM合作,自有品牌的部分则透过海外经销商。

19. 请说出你选择这份工作的动机?
回答提示:这是想知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应试的人,如果是无经验者,可以强调“就算职种不同,也希望有机会发挥之前的经验”。

20. 你最擅长的技术方向是什么?
回答提示:说和你要应聘的职位相关的课程,表现一下自己的热诚没有什么坏处。

21. 你能为我们公司带来什么呢?
回答提示:

假如你可以的话,试着告诉他们你可以减低他们的费用——“我已经接受过惠普公司一段时间的培训,立刻就可以上岗工作”。
企业很想知道未来的员工能为企业做什么,求职者应再次重复自己的优势,然后说:“就我的能力,我可以做一个优秀的员工在组织中发挥能力,给组织带来高效率和更多的收益”。企业喜欢求职者就申请的职位表明自己的能力,比如申请营销之类的职位,可以说:“我可以开发大量的新客户,同时,对老客户做更全面周到的服务,开发老客户的新需求和消费。”等等。
22. 最能概括你自己的三个词是什么?
回答提示:
我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释。

23. 你的业余爱好是什么?
回答提示:找一些富于团体合作精神的,这里有一个真实的故事:有人被否决掉,因为他的爱好是深海潜水。主考官说:因为这是一项单人活动,我不敢肯定他能否适应团体工作。

24. 作为被面试者给我打一下分
回答提示:试着列出四个优点和一个非常非常非常小的缺点,(可以抱怨一下设施,没有明确责任人的缺点是不会有人介意的)。

25. 你怎么理解你应聘的职位?
回答提示:把岗位职责和任务及工作态度阐述一下

26. 喜欢这份工作的哪一点?
回答提示:相信其实大家心中一定都有答案了吧!每个人的价值观不同,自然评断的标准也会不同,但是,在回答面试官这个问题时可不能太直接就把自己心理的话说出来,尤其是薪资方面的问题,不过一些无伤大雅的回答是不错的考虑,如交通方便,工作性质及内容颇能符合自己的兴趣等等都是不错的答案,不过如果这时自己能仔细思考出这份工作的与众不同之处,相信在面试上会大大加分。

27. 为什么要离职?
回答提示:

回答这个问题时一定要小心,就算在前一个工作受到再大的委屈,对公司有多少的怨言,都千万不要表现出来,尤其要避免对公司本身主管的批评,避免面试官的负面情绪及印象;建议此时最好的回答方式是将问题归咎在自己身上,例如觉得工作没有学习发展的空间,自己想在面试工作的相关产业中多加学习,或是前一份工作与自己的生涯规划不合等等,回答的答案最好是积极正面的。
我希望能获得一份更好的工作,如果机会来临,我会抓住;我觉得目前的工作,已经达到顶峰,即沒有升迁机会。
28. 说说你对行业、技术发展趋势的看法?
回答提示:企业对这个问题很感兴趣,只有有备而来的求职者能够过关。求职者可以直接在网上查找对你所申请的行业部门的信息,只有深入了解才能产生独特的见解。企业认为最聪明的求职者是对所面试的公司预先了解很多,包括公司各个部门,发展情况,在面试回答问题的时候可以提到所了解的情况,企业欢迎进入企业的人是“知己”,而不是“盲人”。

29. 对工作的期望与目标何在?
回答提示:这是面试者用来评断求职者是否对自己有一定程度的期望、对这份工作是否了解的问题。对于工作有确实学习目标的人通常学习较快,对于新工作自然较容易进入状况,这时建议你,最好针对工作的性质找出一个确实的答案,如业务员的工作可以这样回答:“我的目标是能成为一个超级业务员,将公司的产品广泛的推销出去,达到最好的业绩成效;为了达到这个目标,我一定会努力学习,而我相信以我认真负责的态度,一定可以达到这个目标。”其他类的工作也可以比照这个方式来回答,只要在目标方面稍微修改一下就可以了。

30. 说说你的家庭。
回答提示:企业面试时询问家庭问题不是非要知道求职者家庭的情况,探究隐私,企业不喜欢探究个人隐私,而是要了解家庭背景对求职者的塑造和影响。企业希望听到的重点也在于家庭对求职者的积极影响。企业最喜欢听到的是:我很爱我的家庭!我的家庭一向很和睦,虽然我的父亲和母亲都是普通人,但是从小,我就看到我父亲起早贪黑,每天工作特别勤劳,他的行动无形中培养了我认真负责的态度和勤劳的精神。我母亲为人善良,对人热情,特别乐于助人,所以在单位人缘很好,她的一言一行也一直在教导我做人的道理。企业相信,和睦的家庭关系对一个人的成长有潜移默化的影响。

其他HR面试题
31.就你申请的这个职位,你认为你还欠缺什么?
32.你欣赏哪种性格的人?
33.你通常如何处理別人的批评?
34.你怎样对待自己的失敗?
35.什么会让你有成就感?
36.眼下你生活中最重要的是什么?
37.你为什么愿意到我们公司来工作?
38.你和别人发生过争执吗?你是怎样解决的?
39.问题:你做过的哪件事最令自己感到骄傲?
40.你新到一个部门,一天一个客户来找你解决问题,你努力想让他满意,可是始终达不到群众得满意,他投诉你们部门工作效率低,你这个时候怎么作?
41.对这项工作,你有哪些可预见的困难?
42.如果我录用你,你将怎样开展工作?
43.“你希望与什么样的上级共事?
44.在完成某项工作时,你认为领导要求的方式不是最好的,自己还有更好的方法,你应该怎么做?
45.与上级意见不一是,你将怎么办?
46.你工作经验欠缺,如何能胜任这项工作?
47.您在前一家公司的离职原因是什么?
48.你工作经验欠缺,如何能胜任这项工作?
49.为了做好你工作份外之事,你该怎样获得他人的支持和帮助?
50.如果你在这次面试中没有被录用,你怎么打算?
51.假如你晚上要去送一个出国的同学去机场,可单位临时有事非你办不可,你怎么办?
52.如果通过这次面试我们单位录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
53.你做过的哪件事最令自己感到骄傲?
54.谈谈你过去做过的成功案例
55.谈谈你过去的工作经验中,最令你挫折的事情
56.如何安排自己的时间?会不会排斥加班?
57.为什么我们要在众多的面试者中选择你?
58.对这个职务的期许?
59.为什么选择这个职务?
60.为什么选择我们这家公司?
61.你认为你在学校属于好学生吗?
62.请谈谈如何适应办公室工作的新环境?
63.在工作中学习到了些什么?
64.有想过创业吗?
65.最能概括你自己的三个词是什么?
66.你认为你在学校属于好学生吗?
67.除了本公司外,还应聘了哪些公司?
68.何时可以到职?
69.你并非毕业于名牌院校?
70.你怎样看待学历和能力?

一面问的是网络,操作系统,数据结构等基础知识,投递的是java开发岗二轮技术面 你的项目有啥亮点,怎么构建的,解决了什么问题,困难点在哪?用了什么框架?
controller:控制器
service:服务-接口
impl:服务-实现
integration
sao:调用其他模块的,把feign的调用放到这个下面
web:供前端调用
remote:调用外部接口(其他模块提供的接口)
api:各模块间的调用(对外的接口)
openapi:对外的接口
dao:持久层/mybatis接口
entity:数据库实体
mapper:持久层/mybatis实现
vo:前端页面到controller的参数对象
dto:调用接口传递使用(入参/出参)
bo:在service层使用
po:mapper数据库操作入参
common:公共组件
config:配置类
utils:工具类
constant:常量
pojo命名:统一都是首字母大写
    比如:PoDetailVO,PoDetailDTO,PoDetailBO

 

一、注解(annotations)列表
@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。

@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。

@EnableAutoConfiguration 自动配置。

@ComponentScan 组件扫描,可自动发现和装配一些Bean。

@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

@RestController注解是@Controller和@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。

@Autowired自动导入。

@PathVariable获取参数。

@JsonBackReference解决嵌套外链问题。

@RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

二、注解(annotations)详解

@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

复制代码
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
复制代码

@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTful的api。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。示例代码:

@RequestMapping(“/test”)
@ResponseBody
public String test(){
return”ok”;
}

@Controller:用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。示例代码:

复制代码
@Controller
@RequestMapping(“/demoInfo”)
publicclass DemoController {
@Autowired
private DemoInfoService demoInfoService;

@RequestMapping("/hello")
public String hello(Map<String,Object> map){
System.out.println("DemoController.hello()");
map.put("hello","from TemplateController.helloHtml");
//会使用hello.html或者hello.ftl模板进行渲染显示.
return"/hello";
}
}
复制代码

@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。示例代码:

复制代码
package com.kfit.demo.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping(“/demoInfo2”)
publicclass DemoController2 {

@RequestMapping("/test")
public String test(){
return"ok";
}
}
复制代码

@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。

@EnableAutoConfiguration:Spring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

@Import:用来导入其他配置类。

@ImportResource:用来加载xml配置文件。

@Autowired:自动导入依赖的bean

@Service:一般用于修饰service层的组件

@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean:用@Bean标注方法等价于XML中配置的bean。

@Value:注入Spring boot application.properties配置的属性的值。示例代码:

@Value(value = “#{message}”)
private String message;

@Inject:等价于默认的@Autowired,只是没有required属性;

@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Bean:相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

@AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

@Autowired
@Qualifier(value = “demoInfoService”)
private DemoInfoService demoInfoService;

@Resource(name=”name”,type=”type”):没有括号内内容的话,默认byName。与@Autowired干类似的事。

三、JPA注解

@Entity:@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。

@Column:如果字段名与列名相同,则可以省略。

@Id:表示该属性为主键。

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。

四、springMVC相关注解

@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有“/path”的UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性:
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
value:指定请求的实际地址,指定的地址可以是URI Template 模式
method:指定请求的method类型, GET、POST、PUT、DELETE等
consumes:指定处理请求的提交内容类型(Content-Type),如application/json,text/html;
produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

@RequestParam:用在方法的参数前面。
@RequestParam
String a =request.getParameter(“a”)。

@PathVariable:路径变量。如
在面试过程中,程序员都需要介绍自己做过的项目,有的是在工作中做过的,有的是业余时间完成的,有的是团队合作完成的,有的是个人独立完成的。丰富的开场是赢下面试的基础。我总结了如下几个方面的项目介绍流程,供大家参考:

项目描述
这一部分可以先总后分,总体介绍下描述下这个项目是做什么的,是否已上线,用户量有多大,然后介绍这个项目分为了哪些模块,如果是微服务,那可以介绍下有哪些应用。这一部分可以让面试官对你做的项目有个大体的了解,有些公司对行业有要求,比如支付公司、银行一般都要求有支付行业的项目经验。

团队组成
可以这样说:这个项目,加上我,总共多少人,其中几个是开发,几个是测试。也可以说几个前端,几个后端。
这一部分可以让面试官了解你这个项目的规模,参与规模大的项目肯定比规模小的项目有优势。

角色担当
可以这样说:我在团队里担当核心(前端、后端)开发,负责核心模块(核心功能)的开发,比如权限管理模块、登录注册功能、文件上传等。

技术架构
接着,可以介绍项目中用到的技术,前端用了xx框架,后端用了xx框架,持久层用了xx框架,数据库用的xxx。中间件用到了redis等,除了框架,还可以介绍一些工程化技术,比如jar包依赖使用maven,代码管理使用git等

场景解决方案
当你介绍完上面的技术架构后,面试官可以会问你:

redis在什么场景中用到?为什么要用redis?
为什么用git,不用svn?

所以我们需要提前准备好一些场景,描述一下用什么技术解决什么业务需求。
每个项目的场景都不太一样,需要结合各自的项目做准备。
比如电商项目,可能有添加购物车,支付,抢购秒杀等场景。
比如后台管理系统,可能有单点登录、报表导出等场景。

以上就是项目介绍的通用框架,在简历中,我们也可以用上面介绍的这个框架来写【项目介绍】。

很多同学在学习了《Spring Cloud + Vue 前后端分离
开发企业级在线视频课程系统》这门课后,都想将这个项目写到简历中,带到面试里,但是不知道该如何介绍。下面我们就以这个项目为例,看看如何介绍这个项目。

项目描述
这是一个类似慕课网的在线视频课程项目,也可以作为网校平台,项目分为三大块,前端网站+管理控台+服务端。
【管理控台】:供内部运营人员使用,用于管理课程、章节、讲师等核心精选信息,也包含了用户资源权限等系统管理。
【前端网站】:供网站会员使用,可以报名课程之后开始学习课程。
【服务端】:为管理控台和前端网站提供各种接口,具体分为了注册中心、网关路由、系统模块、业务模块、文件模块、公共模块,共6个模块。

技术架构
图片描述
整个项目采用目前最热门的前后端分离架构
管理控台和前端网站使用前端框架Vue CLI
UI使用响应式UI Bootstrap,一套页面兼容PC、PAD、移动端
服务端使用微服务框架Spring Cloud
持久层使用Mybatis框架
数据库使用Mysql
中间件使用了Redis
Jar包管理使用Maven
代码管理使用Git。
(以上这些技术都是目前企业级项目开发中常用的,需要熟练掌握)
同时项目中还用到了阿里云的服务,比如OSS服务,用来存储图片视频;视频点播服务,用来对视频做加密转码并授权播放,保证视频安全。

场景解决方案
代码生成器:自己制作了代码生成器,集成到项目中,使用freemarker模板引擎(课程中有介绍怎么制作代码生成器),用于生成service层、controller层,dto层和vue界面代码,配合上mybatis-generator生成持久层代码,极大的提高了开发效率。在一张表设计完成后,只要1分钟,就可完成单表的增删改查管理功能(包含界面)。
单点登录:使用统一登录标识token+分布式缓存redis的方案,实现单点登录。
短信验证码注册:包括了短信验证码生成和验证码校验,并对验证码的时效性做了控制,比如5分钟有效;同一手机号1分钟内只能发送一次验证码;验证码只能使用一次等。
图片验证码登录:使用redis存储验证码,图片验码登录,可以有效防止撞库攻击、暴力**,保障用户信息安全。
权限管理:使用经典的用户+资源+角色的权限设计方案,适用于绝大多数项目的权限管理,纯手工打造,未使用任何现成的权限框架,代码没有盲区,安全,易扩展。
文件上传:实现基本的Vue+SpringBoot文件上传功能
分片上传:当文件较大时,文件上传受网络影响较大,容易失败。在上面基本的文件上传的基础上,扩展成分片上传,提高大文件的上传成功率。
断点续传:在分片上传的基础上,再扩展出断点续传,当传到某一个分片失败了之后,下次再上传同一文件时,从余下的分片开始上传。
极速秒传:对于同一个文件,上传过一次后,再次上传时,会直接提示极速秒传成功,提高用户体验。
文件存储:项目中实现了两种文件存储方法,一是自己搭建文件服务器,二是使用阿里云OSS服务。(实际项目中推荐使用第二种,大大减少了运维工作)
视频加密:作为视频网站,视频安全是核心功能,这里用到了阿里云的视频点播服务(慕课网也是用的阿里云的视频点播服务)。使用接口直接和阿里云对接,实现控台统一管理
授权播放:视频经过加密后,需要授权,才能播放,这里我们使用阿里云aliplayer+阿里云授权接口,实现授权播放。

上面我举例了很多场景,实际在面试的时候,不一定要全部介绍,可以挑几个比较熟悉的着重介绍,其它的可以简单带过。

团队组成和角色担当
如果是一个人跟着课程一步一步做下来的,可以介绍整个项目从框架搭建到前后端代码开发,都是一个人完成的。

另外,还要自己准备一些常见的面试题,比如:

项目开发过程中遇到过什么问题?
这个需要平时积累了,将开发过程中,遇到过的比较难解决的点记录下来,可以这样回答:……这个问题解决后,很有成就感,成就感很重要,听起来有专研精神,不过只适合初中级程序员,高级程序员说成就感就有点掉价。

对我们公司有什么问题
这个需要提交了解要面试的公司的相关情况,至少让面试的人觉得你对他们公司还是有兴趣的,有提前了解。

最后祝所有的程序员都能面试顺利!
设计模式是呗编程者总结出来的一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验。掌握几种常用的设计模式,对于Java应聘者来说十分重要,比如单例模式、工厂模式、建造者模式等等,接下来就来简单介绍一下这几种常见的设计模式和它们的应用场景。(想了解更多可以参考下面的视频教程)

黑马程序员Java设计模式详解,全网最全23种Java设计模式(图解+框架源码分析+实战)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
​www.bilibili.com/video/BV1Np4y1z7BU

(1)考察目标

考官主要是对一些常用设计模式和代码抽取优化能力的考核,问题可能涉及6大设计原则及23种设计模式。

(2)题目分析

比较熟悉的有:

单例模式:

保证一个类仅有一个实例,并提供一个全局访问点,比如一些配置文件或者管理类可以设计为单例,我们常用的线程池也是单例的。

模板方法:

在定义好的算法骨架下,允许子类为一个或多个步骤提供实现,一次性实现算法的不变部分,将可变部分留给子类实现,当子类实现代码逻辑雷同时,可以使用此设计模式。

工厂模式:

创建对象需要大量的重复代码时,通过子类实现方法来创建对象。如Spring中通过工厂模式将创建对象的任务交给容器管理。

建造者模式:

讲复杂对象的构建和表示分离,适用于流程固定,但是顺序不一定固定的场景。如需要给一个对象多次给不同的属性赋值,可以使用链式调用传参,最后生成对象。

另外,如策略模式,观察者模式,模板方法模式,foreach中的迭代器模式,spring 中ASM的访问者模式,动态代理等都有一些了解。

(3)应用场景

JavaEE应用中,Spring用于创建IOC容器的监听器就是基于观察者模式的。Spring中获取FileSystemResource和ClassPathResource等功能雷同的类时使用模板方法。

单例模式:包含懒汉饿汉式以及不同的变种,工厂类设计模式一般也设计为单例。项目中的一些配置,或者引入外部的sdk需要创建管理类,或者封装自己的框架时,需要用到单例

工厂方法:在编码时不能预见需要创建哪种类的实例。

(4)总结

本题主要考察的是:

1)常用设计模式

2)代码抽取优化能力

发布于 04-09
1、jsp有哪些内置对象?作用分别是什么?
答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
 request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外

2、jsp有哪些动作?作用分别是什么?
答:JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

3、JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include动作实现
<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %>

4、两种跳转方式分别是什么?有什么区别?
答:有两种,分别为:
<jsp:include page="included.jsp" flush="true">
<jsp:forward page= "nextpage.jsp"/>
前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

JAVA部分二

 


1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为friendly

2、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
就HashMap与HashTable主要从三方面来说。
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

3、char型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify

5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
答:父类:
package test;
public class FatherClass
{
public FatherClass()
{
System.out.println("FatherClass Create");
}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{
System.out.println("ChildClass Create");
}
public static void main(String[] args)
{
FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass();
}
}
输出结果:
C:\>java test.ChildClass
FatherClass Create
FatherClass Create
ChildClass Create

6、内部类的实现方式?
答:示例代码如下:
package test;
public class OuterClass
{
private class InterClass
{
public InterClass()
{
System.out.println("InterClass Create");
}
}
public OuterClass()
{
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();
}
}
输出结果:
C:\>java test/OuterClass
InterClass Create
OuterClass Create
再一个例题:
public class OuterClass {
private double d1 = 1.0;
//insert code here
}
You need to insert an inner class declaration at line 3. Which two inner class declarations are

valid?(Choose two.)
A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}
说明如下:
一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错
二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。

故 D 错
三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确
四.答案为C、E
SELEVLET部分三

 

Servlet方面

1、说一说Servlet的生命周期?
答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

2、Servlet版本间(忘了问的是哪两个版本了)的不同?
希望大家补上,谢谢

3、JAVA SERVLET API中forward() 与redirect()的区别?
答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

4、Servlet的基本架构
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}


1、用String的方法将数据类型转换为String。

2、有一个不定长度的String,其中前面是字母,后边是数字,例如:"abcd123.456",
要求写一个方法得到其中的数字以String的形式返回,数字保留小数点后两位,不四舍五入,截去多余小

数,例如:"abcd123.456",得到"123.45"
如果数字没有小数点,要得到两位为0的小数,例如:"abcd123",得到"123.00".
答案如下:
1、String.valueOf(1.23)

2、 public String getString(String str){
String getNumber;
getNumber = str.replaceAll("[a-z|A-Z]", "");
if(getNumber.indexOf(".") == -1){
getNumber = getNumber+".00";
} else {
if(getNumber.indexOf(".")== getNumber.length()-1){
getNumber = getNumber+"00";
} else if (getNumber.indexOf(".")== getNumber.length()-2){
getNumber = getNumber+"0";
} else {
getNumber = getNumber.substring(0, getNumber.indexOf(".")+3);
}
}
return getNumber;
}

 

----------------------------------------------------------------


1 面向对象的特征?

1)对象

对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。

2)类

类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。

3)封装

封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,

不能被外界访问,以此实现对数据和代码不同级别的访问权限。

4)继承

继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派

生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。

5)多态

多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接

口,通过这种方式减少代码的复杂度。

6)动态绑定

绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只

有在运行期才可知的一种绑定,它是多态实现的具体形式。

7)消息传递

对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要

调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。

2 tomcat的内存的配置?

tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。

Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB


3 doGet() 和 doPost() 的区别?

doGet() 和 doPost() 接收两个参数:HttpServletRequest 请求和HttpServletResponse响应。

HTTP 协议要么通过在 URL 中放置参数来向 Web 服务器传递信息,要么独立于 URL 传递信息。第一种称

作 GET 命令,而第二种称作 POST 命令。GET 命令的优点是,URL 包含了检索请求信息所需的所有信息

。因此,可将其加入书签以便将来重新调用。而 POST 命令独立于 URL 发送附加信息,提供了更好的安

全性。当需要发送比较大量的信息时,该方法也更为合适。其缺点就是不能被加入书签。

4 常用的标准的sql语句?

增加: insert into tbl_emp(name,password,id) values(yxx,123,12);

删除:delete from tbl_emp where name= "yxx";

查询: select * from tbl_emp where name="yxx";

更新: update tbl_emp set name="xiaoxin" where id = 12;
5 string 和 stringbuffer的区别?

它们都是处理字符串的类,但是它们有一个最大的区别,那就是,String对象是存储你不能改动的文本字符

串,相反,如果你希望改动,则应使用StringBuffer类作为替换.

6在jsp页面中如何传递对象?

request,session,application,cookie等

 

7 常用的集合类?

java.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和 Map。 List 的具体

实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元

素列表。 List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作“键”和“值”),其中每

个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。 而实际上,除了 List

和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带

的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。


8 常出现的异常?

ioexception nullpointexception classnotfound classnofound runtime

9 经常使用的包,接口,类 请各举出5个?

10 接口和抽象类的区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行

为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以

创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态

方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,

在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

  接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的

接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量

。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即

将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类

型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

11 动态include()和静态include()的区别?

12 servlet的生命周期?(介绍过---------------------------------)

13 struts的原理?

14 数据连接池的原理?

连接池允许我们通过一个缓冲池重用现有的连接对象,避免每次使用连接对象时都要新建一个对象。采用

连接池之后,只要少量的连接对象就可以满足大量客户端的需要。

  每一个连接池都与一个独立的连接字符串及其事务上下文关联。每次打开一个新的连接,数据提供者

会尝试将指定的连接字符串与连接池的字符串进行匹配。如果匹配失败,数据提供者创建一个新的连接并

将它加入连接池。连接池被创建之后,除非进程结束,否则不会被拆除。有人认为这种处理方式会影响性

能,其实不然,维护一个不活动的或者空的连接池不需要多少开销。

  连接池创建之后,系统会创建一些连接对象并将它们加入连接池,直至达到额定的最小连接对象数量

。以后,系统会根据需要新建和加入连接对象,一直到达最大连接对象数量限额为止。如果程序请求一个

连接对象时没有空闲的连接对象可用,且连接池里面的对象数量已达到上限,则请求被放入队列,一旦有

连接被释放回缓冲池就立即取出使用。

  避免用编程的方式构造连接字符串。如果通过合并多个输入数据的方式构造出连接字符串,很容易给

 

 

 


注入式攻击以可乘之机。如果必须用到用户输入的数据,务必进行严格的验证。

15 j2ee的设计模式?

Session Facade Pattern:使用SessionBean访问EntityBean

Message Facade Pattern:实现异步调用

EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问

Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性

Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性

Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性


16 线程的同步方法?(介绍过--------------------------------------------)

17 四种会话跟踪技术?

会话作用域ServletsJSP 页面描述
page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何

的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP

页面
request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多

个 Web 组件(由于 forward 指令和 include 动作的关系)
session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常

会跨越多个客户机请求
application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包

括多个页面、请求和会话的一个全局作用域


18 解释 forward include和redirect的不同?

forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为

request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。
forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如:

req.sendRedriect("http://www.mocuai.com");


19 jsp的内值对象?

request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外

20 EJB的角色和三个对象

EJB角色主要包括Bean开发者 应用组装者 部署者 系统管理员 EJB容器提供者 EJB服务器提供者

三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类


ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException,

CannotRedoException, CannotUndoException, ClassCastException, CMMException,

ConcurrentModificationException, DOMException, EmptyStackException,

IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,

IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException,

NegativeArraySizeException, NoSuchElementException, NullPointerException,

ProfileDataException, ProviderException, RasterFORMatException, SecurityException,

SystemException, UndeclaredThrowableException, UnmodifiableSetException,

UnsupportedOperationException
谈谈你对测试的理解

2

你的长期的人生规划

3

你对加班的看法?你曾经长期加班?

4

你心目中理想的公司怎么样?理想的工作环境?理想的同事关

系?

5

你认为激励你努力工作的因素都有那些?

6

假设你发现别人不诚实(与工作有关),你会怎么办?

7

你的最大的缺点是什么?有什么专业特长?喜欢体育运动吗?

8

什么是管理信息系统?你认为管理信息系统的重点是什么?

9

什么是数据库?什么是关系型数据库?描述什么是主

10

假如你是质检员,怎么对自行车进行检查?若要保证质量必须

要检查的三个部件,你认为是什么?

11

给出一段文字描述,画出

er

12

根据程序流程图,使用最少的路径,覆盖最多的语句

数据库题(给出了两个表成绩表和课程表)

1

说明主键、外键的作用,索引的好处与不足?

2

创建表

3

查询成绩小于

60

分的学生姓名和学号

select

姓名

,

学号

from

课程成绩表

where

分数

‘60’

4

查询成绩小于

60

分的学生姓名和课程名

5

查询平均成绩并排序

面试题:

1

2

3

4

5

自我介绍并描述你认为做得成功的两三个项目

你三年的职业规

描述

td

qtp

、工具的测试流程

描述登陆脚本的录制过程

lr

脚本

的组成

6

缺陷报告的组成要素?

7

对缺陷怎么进行分析解决?
1.get和post的区别?
2.什么是代理模式?说说你的理解?
3.对ssh框架的理解?
4.线程如何创建?
5.Servlet的生命周期?
6.Tomcat的理解?
1

、用

String

的方法将数据类型转换为

String

2

、有一个不定长度的

String

,其中前面是字母,后边是数字

,

例如:

"abcd123.456",

要求写一个方法得到其中的数字以

String

的形式返回

,

数字保留小数点后两位,

不四舍五入,

截去多余小

,

例如:

"abcd123.456"

,得到

"123.45"

如果数字没有小数点

,

要得到两位为

0

的小数,例如:

"abcd123"

,得到

"123.00".

答案如下

:

1

String.ValueOf (1.23)

2

public String getString(String str){
String getNumber;

getNumber = str.replaceAll("[a-z|A-Z]", "");

if(getNumber.indexOf(".") == -1){
getNumber = getNumber+".00";

} else {
if(getNumber.indexOf(".")== getNumber.length()-1){
getNumber = getNumber+"00";

} else if (getNumber.indexOf(".")== getNumber.length()-2){
getNumber = getNumber+"0";

} else {
getNumber = getNumber.substring(0, getNumber.indexOf(".")+3);

}

}

return getNumber;

}

----------------------------------------------------------------

1

面向对象的特征?

1

)对象

对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。

2

)类

类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。

3

)封装

封装是将数据和代码捆绑到一起,

避免了外界的干扰和不确定性。

对象的某些数据和代码可

以是私有的,

不能被外界访问,以此实现对数据和代码不同级别的访问权限。

4

)继承

继承是让某个类型的对象获得另一个类型的对象的特征。

通过继承可以实现代码的重用:

已存在的类派

生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。

5

)多态

多态是指不同事物具有不同表现形式的能力。

多态机制使具有不同内部结构的对象可以共享

相同的外部接
1Arrylist和Linkedlist的区别;2如何遍历map;3request和response的基本方法;4session和cookie的区别
说一说自己对于 synchronized 关键字的了解
说说自己是怎么使用 synchronized 关键字,在项目中用到了吗
讲一下 synchronized 关键字的底层原理
说说 JDK1.6 之后的synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗
谈谈 synchronized和ReenTrantLock 的区别
说说 synchronized 关键字和 volatile 关键字的区别
为什么要用线程池?
实现Runnable接口和Callable接口的区别
执行execute()方法和submit()方法的区别是什么呢?
如何创建线程池
介绍一下Atomic 原子类
JUC 包中的原子类是哪4类?
讲讲 AtomicInteger 的使用
能不能给我简单介绍一下 AtomicInteger 类的原理


多线程面试专题与答案

JVM的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保Java代码可在符合该规范的任何系统上运行。JVM对其实现的某些方面给出了具体的定义,特别是对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。这些定义为JVM解释器开发人员提供了所需的信息和开发环境。Java的设计者希望给开发人员以随心所欲使用Java的自由。

JVM
内存模型以及分区,需要详细到每个区放什么。
GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
Minor GC 与 Full GC 分别在什么时候发生?
堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
简述 java 垃圾回收机制?
java 中垃圾收集的方法有哪些?
类加载器双亲委派模型机制?什么是类加载器,类加载器有哪些?
简述 java 内存分配与回收策率以及 Minor GC 和Major GC


Redis
为什么要用 redis /为什么要用缓存?
为什么要用 redis 而不用 map/guava 做缓存?
redis 和 memcached 的区别?
上述 Redis 分布式锁的缺点?
redis 常见数据结构以及使用场景分析
redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)?
缓存雪崩和缓存穿透问题解决方案?
如何解决 Redis 的并发竞争 Key 问题?
如何保证缓存与数据库双写时的数据一致性?


Redis面试专题与答案

Spring一般是不可避免的,如果你的简历上注明了你会Spring Boot或者Spring Cloud的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你springboot和spring的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。

另外,AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己怎么实现一个IOC容器? 这些东西都是经常会被问到的。

Spring
Spring Bean 的作用域?
如何用基于 Java 配置的方式配置 Spring?
请说下 Spring Bean 的生命周期?
Spring Bean 的作用域之间有什么区别?
请举例说明如何在 Spring 中注入一个 Java Collection?
Spring 框架中有哪些不同类型的事件?
Spring 框架中都用到了哪些设计模式?
开发中主要使用 Spring 的什么技术 ?


Spring面试专题与答案

“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。这也是面试经常被问到的

由于篇幅限制小编,以上面试专题答案全部整理在一个pdf文档里了,文档里的详解资料太全面,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙转发+关注私信(面试)获取哦

BATJ真实面试题



这篇关于JAVA面经的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程