[转载] 面试常见问题总结
参考链接: 从列表中移除满足Java中给定谓词元素
一、spring的注解方式
@Controller
标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.
@RestController
Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@Service
用于标注业务层组件,说白了就是加入你有一个用注解的方式把这个类注入到spring配置中
@Autowired
用来装配bean,都可以写在字段上,或者方法上。默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,例如:@Autowired(required=false)
@RequestMapping
类定义处: 提供初步的请求映射信息,相对于 WEB 应用的根目录。 方法处: 提供进一步的细分映射信息,相对于类定义处的 URL。
@RequestParam
用于将请求参数区数据映射到功能处理方法的参数上
@ModelAttribute
使用地方有三种:
1、标记在方法上。
标记在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中。A.在有返回的方法上:
当ModelAttribute设置了value,方法返回的值会以这个value为key,以参数接受到的值作为value,存入到Model中,如下面的方法执行之后,最终相当于 model.addAttribute(“user_name”, name);假如 @ModelAttribute没有自定义value,则相当于model.addAttribute(“name”, name); B.在没返回的方法上:
需要手动model.add方法
2、标记在方法的参数上。
标记在方法的参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用.我们在上面的类中加入一个方法如下
@Cacheable
用来标记缓存查询。可用用于方法或者类中
@CacheEvict
用来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存。@CacheEvict(value=”UserCache”)
@Resource
@Resource的作用相当于@Autowired只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。 @Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。 @Resource装配顺序:
如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
@PostConstruct
用来标记是在项目启动的时候执行这个方法。用来修饰一个非静态的void()方法也就是spring容器启动时就执行,多用于一些全局配置、数据字典之类的加载 被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。PreDestroy()方法在destroy()方法执行执行之后执
@PreDestroy
被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前
@Repository
用于标注数据访问组件,即DAO组件
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注
@Scope
用来配置 spring bean 的作用域,它标识 bean 的作用域。默认值是单例 singleton:单例模式,全局有且仅有一个实例 prototype:原型模式,每次获取Bean的时候会有一个新的实例 request:request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效 session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效 global session:只在portal应用中有用,给每一个 global http session 新建一个Bean实例。
@SessionAttributes
默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中 参数:
names:这是一个字符串数组。里面应写需要存储到session中数据的名称。types:根据指定参数的类型,将模型中对应类型的参数存储到session中value:和names是一样的。 @Required 适用于bean属性setter方法,并表示受影响的bean属性必须在XML配置文件在配置时进行填充。否则,容器会抛出一个BeanInitializationException异常。
@Qualifier
当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。
参考文献
二、简述get和post请求的区别
1、传送方式:get通过地址栏传输,post通过报文传输。
2、传送长度:get参数有长度限制(受限于url长度),而post无限制
3、GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包
总的说:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
三、HashMap的几种遍历方式
1、使用For-Each迭代map.entrySet()方法
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
}
2、使用For-Each迭代keys和values 可单独取key或value
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
3、使用Iterator迭代
Map map = new HashMap();
Iterator ite= map.entrySet().iterator();
while (ite.hasNext()) {
Map.Entry entry = (Map.Entry) ite.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
4、迭代keys并搜索values,比较低效
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
此方法看上去比方法1更为简洁,map.get(key)却更为耗时,所以性能低下。
四、java多态
Java多态概述
多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定。Java 对于方法调用动态绑定的实现主要依赖于方法表,但通过类引用调用(invokevitual)和接口引用调用(invokeinterface)的实现则有所不同。
多态的要点:
1.多态是方法的多态,不是属性的多态(多态与属性无关) 2.多态存在要有3个必要条件:继承、方法重写、父类引用指向子类对象。 3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了
重载和重写的区别:
重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)。如下,在test3中三个方法名相同的add方法,第一个是两个int类型的书相加,第二个是三个int相加,第三个是两个float相加,他们的参数个数不同或类型不同就构成了重载。重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致的,重写的意义在于父类的方法已经不能满足时,子类重写为自己需要的。如下,在父类Test3中num方法是想做两数的加法运算,而在子类Test4中我想做两数的减法运算,则继承的num方法不能满足,则重写为test4中的num方法进行减法运算。
五、ArrayList删除指定元素
ArrayList有两种方法可以移除元素,一种是传递要移除的元素的索引,另一种是传递要移除的元素本身(如果存在)
按索引删除
使用remove将索引作为参数传递,我们可以删除列表中指定位置的元素,并将任何后续元素向左移动,从其索引中减去一个元素。执行后,remove方法将返回已删除的元素:
List<String> array = new ArrayList();
array.remove(1);
按元素删除
另一种方法是使用此方法从列表中删除元素的第一个匹配项。形式上讲,如果存在的话,我们删除具有最低索引的元素,如果不是,列表不变。
array.remove("wendada");
迭代删除
有时我们希望在循环时从ArrayList中移除元素。由于没有生成ConcurrentModificationException,我们需要使用迭代器类来正确地执行它让我们看看如何在循环中除去元素:
Iterator <String> iterator = array.iterator();
while(iterator.hasNext()) {
if(iterator.netx.equals("wendada")){
iterator.remove();
}
}
阵列列表ArrayList#删除(JDK 8+)
如果我们使用JDK 8或更高版本,我们可以利用ArrayList#removeIf来删除满足给定谓词的ArrayList的所有元素。
array.remove(p -> p.equals("wendada"));
assertEquals(2,array.size());
assertFalse(array.contains("wendada"));
[转载] 面试常见问题总结相关推荐
- 【基础概念】 Redis简介和面试常见问题
Redis简介和面试常见问题 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起 ...
- 分布式系统面试 - 常见问题
分布式系统面试 - 常见问题 有一些同学,之前呢主要是做传统行业,或者外包项目,一直是在那种小的公司,技术一直都搞的比较简单.他们有共同的一个问题,就是都没怎么搞过分布式系统,现在互联网公司,一般都是 ...
- 网路学员面试常见问题:
网路学员面试常见问题: 1.请你修改一下LINUX的视频驱动和声音驱动 答: redhatlinux中用sndconfig来设置声卡,如果没有某个模块,就需要重新编译内核(编译最新发布的linux 内 ...
- html手机端适配怎么调试,html5面试常见问题及答案:移动端布局与适配篇
原标题:html5面试常见问题及答案:移动端布局与适配篇 1. 移动布局自适应不同屏幕的几种方式 (1)响应式布局 (2)100%布局(弹性布局) (3)等比缩放布局(rem) 2. iscroll安 ...
- python面试常见问题-Python面试常见问题,涉及Python各个方面
原标题:Python面试常见问题,涉及Python各个方面 爬虫面试常见问题 一.项目问题: 1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的 2.用的什么框架.为什么选择这个框架 二.框架问 ...
- 【面试】Java面试常见问题汇总(不含答案)、面试指导学习笔记
面试常见问题角度 String是基本数据类型吗? int和Integer有什么区别? HashMap和HashTable的区别,及其实现原理. ArrayList/HashMap的源码.如何实现源码 ...
- tcp当主动发出syn_一文读懂TCP四次挥手工作原理及面试常见问题汇总
简述 本文主要介绍TCP四次挥手的工作原理,以及在面试中常见的问题. 字段含义 seq序号:Sequence Number,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行 ...
- 面试pythone_python面试常见问题有哪些
python面试常见问题有:1.Python是如何被解释的:2.什么是PEP8:3.Python是怎样管理内存的:4.什么是Python装饰器:5.Python提供哪些内置类型等等. 大量免费学习推荐 ...
- 复旦计算机考研复试要口试吗,2017复旦大学考研复试:英语口语面试常见问题汇总...
2017复旦大学考研复试:英语口语面试常见问题汇总本站小编 辅仁网/2017-12-29 A magazine publisher is trying to decide how many magaz ...
最新文章
- 阿里巴巴电商平台架构演变之路
- 设计模式 — 行为型模式 — 访问者模式
- python 读取文件
- 机器学习基础-多元线性回归-02
- 伪元素::before与::after的用法
- AC-DC电源模块怎么选择?有哪些注意事项?
- 学习编程技术常见的疑问,你敢说你没有过一个吗?信你个鬼!
- python 之Requests库学习笔记
- 类字面常量和静态代码执行顺序
- Spring5,最全教程,带你认识IOC容器和AOP切面
- 传统与现代的邂逅——新中式景观设计
- 网站建设教程:企业怎么自己建网站?
- jpg转换成pdf转换器免费版
- html语言web应用开发,使用HTML5框架加速Web开发
- 福大软工1816 · 第六次作业 - 团队选题报告
- 首届Starcoin Move黑客松源码分析——Atlaspad
- window通过bat脚本调用WinSCP上传文件到linux服务器
- 你上次被程序猿喷是因为啥?
- 数字IC后端实现的一些基本概念
- Docker 命令操作
热门文章
- Android 6.0 for X86
- usb耳机android,USB 耳机:配件规范 | Android 开源项目 | Android Open Source Project...
- matlab ext2int,MATLAB程序解读。急急急急急!!!!!!!!!!!
- 计算机科学基础word实验一,大学计算机基础综合实验实验报告 参考模板(1)
- php 管道,PHP 进程间通信---管道篇
- Java用swing实现的贪吃蛇
- Windows10系统下PaddleOCR文本检测和文本识别安装
- 用QBE语言实现关系代数
- 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)
- HDU 1281:棋盘游戏