/** *@Description: 这题面试频率极高,可以说是必来的 *@Author: https://blog.csdn.net/chen_2890 */
public class Test{
public static void main(String[] args) {
// 12,45,9,67,455,用冒泡排序实现升序排列。
int[] arr = { 12, 45, 9, 67, 455 };
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("排序后:");
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + "\t");
//创建一个数组用于排序
int[]arr2={1,4,3,2,6,12,10};
//调用递归的冒泡
arr2=recursiveBubble(arr2,arr2.length);
for(int i=0;i<arr2.length;i++){
System.out.print(arr2[i]);
}
}
//冒泡排序之递归方法
public static int[] recursiveBubble(int[] arr2,int e){
if(e==0){
return arr2;
}
else{
for(int i=0;i<e-1;i++){
int temp=0;
if(arr2[i]>arr2[i+1]){
temp=arr2[i];
arr2[i]=arr2[i+1];
arr2[i+1]=temp;
}
}
e--;
//System.out.println(e);
recursiveBubble(arr2,e);
}
return arr2;
}
}
递归就是方法里调用自身。
出口:在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
效率:递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
栈溢出:在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。
使用Collections.synchronizedList(); 把new关键字换一下就可以了其他的都没变
//让list变成线程安全写法
List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());
session:
cookie:
静多态是泛型式编程风格,它看重的是算法的普适性。
动多态是对象式编程风格,它看重的是接口和实现的分离度。
/**
*@Description: 经典面试题
*@Author: https://blog.csdn.net/chen_2890
*/
public class Test{
public static void main(String[] args) {
// 获取Calendar的实例
Calendar cal = Calendar.getInstance();
// 28天之后的日期
// cal.add(Calendar.DAY_OF_YEAR,28);
// 28 天之前的日期
// cal.add(Calendar.DAY_OF_YEAR,-28);
// 8个月以后的今天是几号
// cal.add(Calendar.MONTH,8);
// 1 年以后的今天是几号
cal.add(Calendar.YEAR,1);
System.out.println(cal.getTime().toLocaleString());
}
}
/** *@Description: Calendar不是单例 *@Author: https://blog.csdn.net/chen_2890 */
public class Test{
public static void main(String[] args) {
//Calendar实例1
Calendar c1 = Calendar.getInstance();
//Calendar实例2
Calendar c2 = Calendar.getInstance();
//获取下一天的时间
c1.add(Calendar.DAY_OF_YEAR,+1);
//打印
System.out.println(c1.getTime().toLocaleString());
System.out.println(c2.getTime().toLocaleString());
//打印出来的时间不一样,说明不是同一个对象,即Calendar不是单例的
}
}
简单地讲,工作流是指整个或部分经营过程在计算机支持下的全自动或半自动化。
在实际情况中可以更广泛地把凡是由计算机软件系统(工作流管理系统)控制其执行的过程都称为工作流。
一个工作流包括一组活动及它们的相互顺序关系,还包括过程及活动的启动和终止条件,
以及对每个活动的描述。
- 文本域、密码域、单选按钮、复选框、按钮、重置按钮、提交按钮、隐藏域、上传域、图片域、下拉列表、lable、文本区域
- HTML5拥有多个新的表单输入类型。这些新特性提供了更好的输入控制和验证。
1.Input 类型- email
email 类型用于应该包含e-mail 地址的输入域。在提交表单时,会自动验证email 域的值。
2.Input 类型- url
url 类型用于应该包含URL 地址的输入域。在提交表单时,会自动验证url 域的值。
3.Input 类型- number
number 类型用于应该包含数值的输入域。您还能够设定对所接受的数字的限定:
4.Input 类型- range
range 类型用于应该包含一定范围内数字值的输入域。
range 类型显示为滑动条。
您还能够设定对所接受的数字的限定:
5.Input 类型- Date Pickers(数据检出器)
HTML5 拥有多个可供选取日期和时间的新输入类型:
date - 选取日、月、年
month - 选取月、年
week - 选取周和年
time - 选取时间(小时和分钟)
datetime - 选取时间、日、月、年(UTC 时间)
datetime-local - 选取时间、日、月、年(本地时间)
6.Input 类型- search
search 类型用于搜索域,比如站点搜索或Google 搜索。
search 域显示为常规的文本域。
盒子模型,英文即box model。无论是div、span、还是a都是盒子。
但是,图片、表单元素一律看作是文本,它们并不是盒子。这个很好理解,比如说,一张图片里并不能放东西,它自己就是自己的内容
一个盒子中主要的属性就5个:width、height、padding、border、margin。如下:
width和height:内容的宽度、高度(不是盒子的宽度、高度)。
padding:内边距。
border:边框。
margin:外边距。
Model(模型):包含数据和行为。不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。
View(视图):负责进行模型的展示,一般就是展示给用户的界面。
Controller(控制器):接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据返回给视图,由视图负责展示,起了调度的作用。
Spring MVC围绕DispatcherServlet设计。
处理流程:
1.客户端发出HTTP请求,服务器接收
如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),Web容器将该请求转交给DispatcherServlet处理。
2.DispacherServlet接收到此请求后,根据请求的信息(URL、HTTP方法、请求报头文、请求参数、Cookie等)及HandleMapping的配置匹配Handler
匹配成功,则返回一个HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器)。
3.DispacherServlet得到Handler后,把Handler封装为适配器
以适配器接口真正调用了处理器的功能处理方法(先执行拦截器的preHandler方法)
返回ModelAndView(如其名,包含了视图逻辑名和模型数据信息)。
4.DispacherServlet借由ViewResolver完成逻辑视图名到真实对象的解析工作。
5.DispacherServlet得到视图对象View,使用它对ModelAndView中的模型数据进行渲染。
6.客户端得到响应(可能是HTML页面、XML、JSON串、PDF……)
单例模式:
保证一个类仅有一个实例,并提供一个访问它的全局访问点
工厂模式:
为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的
建造(Builder)模式:
是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象
观察者模式:
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式又叫发布-订阅(Publish/Subscribe)模式
适配器(Adapter)模式:
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
代理模式:
为其他对象提供一种代理以控制对这个对象的访问。也可以说,在出发点到目的地之间有一道中间层,意为代理。
----统计函数----
AVG --求平均值
COUNT --统计数目
MAX --求最大值
MIN --求最小值
SUM --求和
----日期函数----
DAY() --函数返回date_expression 中的日期值
MONTH() --函数返回date_expression 中的月份值
YEAR() --函数返回date_expression 中的年份值
----算术函数----
三角函数:
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
反三角函数:
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
----字符串函数----
CHAR() --函数用于将ASCII 码转换为字符
LOWER() --函数把字符串全部转换为小写
UPPER() --函数把字符串全部转换为大写
STR() --函数把数值型数据转换为字符型数据
LTRIM() --函数把字符串头部的空格去掉
RTRIM() --函数把字符串尾部的空格去掉
----系统函数----
APP_NAME() --函数返回当前执行的应用程序的名称
ok,Java面试总结到这里
一定会及时更新最新Java面试题
要是对我的文章感兴趣的话,就快关注我吧