记录一次Java笔试题记录一次Java笔试题

记录一次Java笔试题

  • 一、下列语句片段,运行结果是
  • 二、这段代码运行结果是多少?
  • 三、Object中有哪些公共方法?
  • 四、java中基本数据类型有哪些?
  • 五、循环中使用break、continue、return的效果分别是怎么样?
  • 七、springmvc有哪些核心组件,并简要说明作用?
  • 八、现在有两张表,如下所示,写出下面的MySQL语句

一、下列语句片段,运行结果是

int a=1,b=2,c=3,d=4,e=5;
System.out.println(a++*b+c*--d*e++);
  1. Java中运算符的先后顺序
    单目>算数运算符>移位>比较>按位>逻辑>三目>赋值
    单目运算符(一元运算符,即一个变量):+,-,++,–
    算数运算符:+,-,*,/,%
    移位运算符:<<,>>
    关系运算符:>,<,>=,<=,==,!=
    位运算符:&,|,~,^,
    逻辑运算符:&&,||
    三目运算符:表达式1?表达式2:表达式3;
    赋值运算符:=等
  2. 在java中,a++ 和 ++a的相同点都是给a+1,不同点是a++是先参加程序的运行再+1,而++a则是先+1再参加程序的运行。

答案:1x2+3x3x5=42

二、这段代码运行结果是多少?

int  sum =0;
     int ko[][]={
<!-- -->{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
        for (int i = 0; i <=3 ; i++)
            for (int j = 0; j <3 ; j++)
                sum +=ko[i][j];
                System.out.println("sum="+sum);

第一层循环是0,1,2,3 共四次;第二层循环是0,1,2 共三次;

1+2+3+5+6+7+9+10+11+13+14+15=16X3X2=96

三、Object中有哪些公共方法?

  1. clone() 复制对象 慎用 效率低,且对象中有对象引用,对象引用不能copy。
  2. toString() 返回此对象的字符串表示形式
  3. equals() 判断值是否相同
  4. getclass() 返回object的运行类
  5. wait() 导致当前线程等待,同时释放锁,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。
  6. notify() 唤醒正在等待对象监听器的单个进程
  7. notifyAll() 唤醒正在等待对象监听器的所有进程
  8. hashcode() 返回对象的哈希码值
  9. finalize() 当垃圾收集确定不需要该对象时,垃圾回收器调用该方法

四、java中基本数据类型有哪些?

byte、short、int、long、boolean、char、float、double

五、循环中使用break、continue、return的效果分别是怎么样?

  1. break: 此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环。如果break语句包含在嵌套循环里,它只跳出最里面的循环。

  2. continue:循环语句里有此语句时,程序运行到此语句时,不在执行循环体里continue后面的语句而是跳到下一个循环入口处执行下一个循环。

  3. return:是表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。return后函数就结束了,后面的语句不再执行。

六、MySQL语句执行顺序

from

join

on

where

group by (开始使用select中的别名,后面的语句中都可以使用) :子句将中的唯一的值组合成为一组

avg,sum…

having

select

distinct

order by

limit

从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。

第一步:首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表 vt1(选择相对小的表做基础表)。

第二步:接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 。

第三步:如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3 。

第四步:如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3。

第五步:应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。举个简单的例子,有一个学生表(班级,姓名)和一个成绩表(姓名,成绩),我现在需要返回一个x班级的全体同学的成绩,但是这个班级有几个学生缺考,也就是说在成绩表中没有记录。为了得到我们预期的结果我们就需要在on子句指定学生和成绩表的关系(学生.姓名=成绩.姓名)那么我们是否发现在执行第二步的时候,对于没有参加考试的学生记录就不会出现在vt2中,因为他们被on的逻辑表达式过滤掉了,但是我们用left outer join就可以把左表(学生)中没有参加考试的学生找回来,因为我们想返回的是x班级的所有学生,如果在on中应用学生.班级='x’的话,left outer join会把x班级的所有学生记录找回,所以只能在where筛选器中应用学生.班级=‘x’ 因为它的过滤是最终的。

第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。

第七步:应用cube或者rollup选项,为vt5生成超组,生成vt6.

第八步:应用having筛选器,生成vt7。having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。

第九步:处理select子句。将vt7中的在select中出现的列筛选出来。生成vt8.

第十步:应用distinct子句,vt8中移除相同的行,生成vt9。事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。

第十一步:应用order by子句。按照order_by_condition排序vt9,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。排序是很需要成本的,除非你必须要排序,否则最好不要指定order by,最后,在这一步中是第一个也是唯一一个可以使用select列表中别名的步骤。

第十二步:应用top选项。此时才返回结果给请求者即用户。

七、springmvc有哪些核心组件,并简要说明作用?

  1. DispatcherServlet
    DispatcherServlet:通常称之为“前端控制器”,用于统一接收请求并分发,组织处理请求的流程。如果是使用web.xml文件配置项目的Web环境的项目,需要显式的在web.xml配置它,例如映射的请求路径,并确保它是Web容器(例如Tomcat)在启动时就初始化的,并在初始化时会加载Spring环境。如果是使用Spring注解来配置Spring MVC环境的项目,则不需要直接配置它,而是通过自定义AbstractAnnotationConfig DispatcherServletlnitializer的子类来间接的配置,例如配置它映射的请求路径。如果是使用Spring Booti框架的Web项目,你甚至可以不需要知道它的存在,默认映射的请求路径是/*,当然,如果认为有必要的话,也可以配置为其它值。
  2. HandlerMapping
    HandlerMapping:它是一个接口,Spring MVC框架内置了简单的实现类:SimpleUrlHandlerMapping,用于映射请求路径与处理请求的控制器,但是,在实际应用中,并不会直接使用这个实现,而是使用@RequestMapping注解,或进阶的@PostMapping、@DeleteMapping、@PutMapping、@GetMapping等注解,直接配置请求路径与处理请求的方法的映射关系。
  3. Controller
    Controller:是实际处理请求的控制器是开发者自行编写的,通常有多个,一般根据需要处理的请求所涉及的核心数据类型来区分,例如与用户相关的请求则创建UserController,与订单相关的请求则创建OrderController…这些类必须放在组件扫描的包或其子孙包下,并添加@Controller注解,或添加@RestController注解,由于主流的开发模式是服务器端向客户端响应正文,通常使用的是@RestController
    一般还会在这些类的声明之前添加@RequestMapping注解,以统一设计URL中的前缀路径每个控制器类中将有若干个处理请求的方法。
  4. ModelAndView
    ModelAndView:Controller组件处理完请求后得到的结果,由数据与视图名称组成在实际开发中,由于Spring MVC提供了更加便捷的API,通常并不直接使用这种类型作为方法的返回值,当需要转发数据时,可以在方法的参数列表中添加ModelMap对象用于封装需要转发的数据,并使用String类型的返回值表示视图名称,如果需要重定向,则返回以redirect:作为前缀的Stringl即可。主流的开发模式是服务器端向客户端响应正文,完全不需要使用该类型的对象。
  5. ViewResolver
    ViewResolver:视图解析器,可根据视图名称确定需要使用的视图组件。Spring MVC框架内置了简单的实现类:InternalResource ViewResolver,当使用JSP文件作为视图时将使用它,主要配置prefix7和suffix这2个属性,SpringMVC框架会将orefixl的值、控制器返回的视图名称、suffix的值拼接起来,以确定JSP文件的位置并使用。使用Thymeleaf的模版页面作为视图组件时,则配置ThymeleafViewResolver,
    配置思想大致相当,但需要另外配置Thymeleaf的模版引擎和模版解析器。主流的开发模式是服务器端向客户端响应正文,完全不需要使用该组件。

八、现在有两张表,如下所示,写出下面的MySQL语句

CREATE TABLE `tab_a` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `regdate` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `tab_c` (
  `id` int(11) NOT NULL,
  `name2` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 统计 tab_a表中每个月注册用户数
select count(*) as renshu, Date_format( a.regdate,'%Y-%m') from tab_a a group by DATE_FORMAT(a.regdate,'%Y-%m');
  1. 统计tab_a表中有姓名相同的用户数
SELECT *from (SELECT COUNT(*) AS RENSHU,a.NAME FROM tab_a a  group by a.`name` ) b where b.renshu > 1
select count(*),a.name from tab_a a group by a.name having count(*)>1;
  1. 如果表 Tab_A 中有姓名相同的用户,把相同的查出写入表Tab B中
insert into tab_c SELECT ID,NAME FROM tab_a WHERE NAME IN (select name from tab_a group by name having count(*)>1

猜你喜欢

转载自blog.csdn.net/Chenhui98/article/details/126814585