大家好,又见面了,我是你们的朋友全栈君。
1.随机生成一个四位数,要求每位数字均不重复。
第一种:市面上的答案
public class test01 {
public static void main(String[] args) {
Random r = new Random();
int tag[] = {0,0,0,0,0,0,0,0,0,0};
String four = "";
int temp = 0;
while(four.length() != 4){
temp = r.nextInt(10);
if(tag[temp] == 0){
four += temp;
tag[temp] = 1;
}
}
System.out.println(four);
}
}
第二种:使用set添加并比较
public class test01 {
public static void main(String[] args) {
Random r=new Random();
private static int[] ints=new int[3];//四位的数组
String four="";
Set<Integer> set = new HashSet<Integer>();
while(four.length()<4){//从0开始循环到3,共循环4次
int ar= r.nextInt(10);
if(four.length==0 && ar==0){
continue;
}
if(!set.contains(ar)){//判读是否重复
set.add(ar);
four+=ar;
}
}
System.out.println("你要的数:"+four);
}
}
第三种:循环比较,出现这种的直接PASS
if((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d)){
}
2.自定义一个长度为10的数组,不允许用排序的方法(比如冒泡排序等),输出数组中第二大的数。
第一种:在判断最大的同时判断出第二大的
public class Second{
public static void main(String[] args){
int a[10]={2,3,8,1,0,12,56,36,98,23};
int max=a[0];
int SecondMax=0;
for(int i=1;i<10;i++){
if(a[i]>max){
max=a[i];
SecondMax=max;
}else if(a[i]>SecondMax){
SecondMax=a[i];
}
}
System.out.println(SecondMax);
}
}
第二种:使用Array的sort方法,虽然可以但是不符合题意
int [] a = {1,6,4,5,12,23,34,53,11,9};
Arrays.sort(a);
System.out.println(a[8]);
3.将”abcdewfg”逆字符输出。
第一种:使用StringBuilder或者StringBuffer
String s = “abcdewfg”;
StringBuilder sb = new StringBuilder(s);
System.out.println(sb.reverse().toString());
第二种:将字符串拆解逆序输出
String s = “abcdewfg”;
char[] charArray = s.toCharArray();
for(int i=charArray.length-1;i>=0;i--){
System.out.print(charArray[i]);
}
4.自定义一个数据表,用一条sql查询出不同年级男女学生的人数
第一种:使用函数
select class,sum(case when sex="男" then 1 else 0 end) as ‘男’,
sum(case when sex="女" then 1 else 0 end) as ‘女’ from student group by class;
第二种:不使用函数,只使用group by
select class,sum(sex='男'),sum(sex='女') from student group by class;
5、将String date=”2019/04/19 10:40:50″转换成精度为秒的时间戳
public static int getTimestamp(String time) {
Long timestamp = null;
try {
timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return (int)(timestamp/1000);
}
6、计算两个时间点之间的天数
第一种:java1.8新类型
/**
* 计算两个时间点之间的天数
*/
public static void main(String[] args) {
LocalDate start = LocalDate.of(2019, 10, 17);
LocalDate now = LocalDate.now();
System.out.println("两个时间之间的天数是:" + dome2.getBetweenDay(start, now) + " 天。");
}
/**
* 计算两个时间点之间的天数
*/
public static long getBetweenDay(LocalDate start, LocalDate end) {
return end.toEpochDay() - start.toEpochDay();
}
第二种
public static final int daysBetween(Date early, Date late) {
java.util.Calendar calst = java.util.Calendar.getInstance();
java.util.Calendar caled = java.util.Calendar.getInstance();
calst.setTime(early);
caled.setTime(late);
//设置时间为0时
calst.set(java.util.Calendar.HOUR_OF_DAY, 0);
calst.set(java.util.Calendar.MINUTE, 0);
calst.set(java.util.Calendar.SECOND, 0);
caled.set(java.util.Calendar.HOUR_OF_DAY, 0);
caled.set(java.util.Calendar.MINUTE, 0);
caled.set(java.util.Calendar.SECOND, 0);
//得到两个日期相差的天数
int days = ((int) (caled.getTime().getTime() / 1000) - (int) (calst
.getTime().getTime() / 1000)) / 3600 / 24;
return days;
}
public static void main(String[] args)
{
Date earlydate = new Date();
Date latedate = new Date();
DateFormat df = DateFormat.getDateInstance();
try {
earlydate = df.parse("2009-09-21");
latedate = df.parse("2009-10-16");
} catch (ParseException e) {
e.printStackTrace();
}
int days = daysBetween(earlydate,latedate);
System.out.println(days);
}
7、使用反射获取取当前类对应类中的所有方法;输出方法名数组
package dome;
import java.lang.reflect.Method;
public class dome1 {
//使用反射获取取当前类对应类中的所有方法--输出方法名数组
public static void main(String[] args) throws ClassNotFoundException {
Class clazz = Class.forName("dome.dome1");
System.out.println(clazz.getName());
Method[] methods = clazz.getMethods();
for(Method method:methods){
System.out.print(" "+method.getName());
}
System.out.println();
}
}
8、完成下列要求:
1) 使用一个Map,以老师的名字作为键,以老师教授的课程名作为值,表示上述课程安排。
2) 增加新老师Tom教CoreJava
增加新老师John教Oracle
增加新老师Susan教Oracle
增加新老师Jerry教JDBC
增加新老师Jim教Unix
增加新老师Kevin教JSP
增加新老师Allen教JDBC
3) Lucy 改为教CoreJava
4) 删除Jim老师
5) 遍历Map,输出所有的老师及老师教授的课程
6) 利用Map,输出所有教JSP 的老师。
package com.lanxi.demo1_2;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Test {
public static void main(String[] args) {
Map map=new HashMap();
//以老师姓名为key,以老师所上课程为value,放入集合
map.put("Tom", "CoreJava");
map.put("John", "Oracle");
map.put("Susan", "Oracle");
map.put("Jerry", "JDBC");
map.put("Jim", "Unix");
map.put("Kevin", "JSP");
map.put("Lucy", "JSP");
//增加一位新老师
map.put("Allen", "JDBC");
//删除Jim老师
map.remove(“Jim”)
//将Lucy改为教CoreJava
map.put("Lucy", "CoreJava");
//遍历map
System.out.println("name lecture");
Iterator it=map.entrySet().iterator();
while(it.hasNext()){
Entry en=(Entry)it.next();
System.out.println(en.getKey()+"\t"+en.getValue());
if("JSP".equals(en.getValue())){
System.out.println("教JSP的老师:"+en.getKey());
}
}
}
}
9、简述mvc的工作原理。
//传统MVC
客户端发送请求request。servlet容器将请求传递给springMVC的前端控制器dispatchServlet接收到请求后。将url转发给handlermapper.根据url查找相应的handler。并将其传回DispatchServlet。由其发送请求到处理器适配器,处理器前端适配器寻找相应的Hanler处理。这里的Handler就是我们写的controller。处理完毕后。会返回相应的ModelView。并将其传回处理器适配器。处理器适配器将其传回DispatchServlet。由DispatchServlet将数据传递给视图渲染器。视图渲染器将渲染完成后得到的真正的视图传回DispatchServlet。由DispatchServlet将视图展现给客户端。
持久层:创建接口,并编写抽象方法。规划需要执行的sql语句。编写sql映射。
业务层:规划可能出现的异常。创建接口,并编写持久层对应的抽象方法。创建实现类,对抽象方法进行实现。
控制器:创建所有控制器类的基类。添加ExceptionHandler注解,对业务层设置的异常进行捕获。autowire自动装配业务层对象,进行实现。
// SpringMVC
Springmvc架构原理解析
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括 Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
视图渲染将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
组件:
1、前端控制器DispatcherServlet(不需要程序员开发)
作用接收请求,响应结果,相当于转发器,中央处理器。
有了DispatcherServlet减少了其它组件之间的耦合度。
2、处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的url查找Handler
3、处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
4、处理器Handler(需要程序员开发)
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler
5、视图解析器View resolver(不需要程序员开发)
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)
6、视图View(需要程序员开发jsp)
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
10、谈谈你对Spring Boot的认识
spring Boot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。此框架的神奇之处在于@EnableAutoConfiguration注解,此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。
1. @Enable*注释 @Enable*注释并不是新发明的注释,早在Spring 3框架就引入了这些注释,用这些注释替代XML配置文件。 很多Spring开发者都知道@EnableTransactionManagement注释,它能够声明事务管理;@EnableWebMvc注释,它能启用Spring MVC;以及@EnableScheduling注释,它可以初始化一个调度器。
2. 属性映射 下面看MongoProperties类,它是一个Spring Boot属性映射的例子: @ConfigurationProperties(prefix = "spring.data.mongodb") public class MongoProperties { private String host; private int port = DBPort.PORT; private String uri = "mongodb://localhost/test"; private String database; // ... getters/ setters omitted } @ConfigurationProperties注释将POJO关联到指定前缀的每一个属性。例如,spring.data.mongodb.port属性将映射到这个类的端口属性。 强烈建议Spring Boot开发者使用这种方式来删除与配置属性相关的瓶颈代码。
3.@Conditional注释 Spring Boot的强大之处在于使用了Spring 4框架的新特性:@Conditional注释,此注释使得只有在特定条件满足时才启用一些配置。 在Spring Boot的org.springframework.boot.autoconfigure.condition包中说明了使用@Conditional注释能给我们带来什么,下面对这些注释做一个概述: @ConditionalOnBean @ConditionalOnClass @ConditionalOnExpression @ConditionalOnMissingBean @ConditionalOnMissingClass @ConditionalOnNotWebApplication @ConditionalOnResource @ConditionalOnWebApplication
4.应用程序上下文初始化器 spring.factories还提供了第二种可能性,即定义应用程序的初始化。这使得我们可以在应用程序载入前操纵Spring的应用程序上下文ApplicationContext。 特别是,可以在上下文创建监听器,使用ConfigurableApplicationContext类的addApplicationListener()方法。 AutoConfigurationReportLoggingInitializer监听到系统事件时,比如上下文刷新或应用程序启动故障之类的事件,Spring Boot可以执行一些工作。这有助于我们以调试模式启动应用程序时创建自动配置的报告。 要以调试模式启动应用程序,可以使用-Ddebug标识,或者在application.properties文件这添加属性debug= true。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106431.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...