赞
踩
最近大致总结了下前一段时间面试Java实习生岗位所遇到的问题。
面试官首先随便给我聊了一下,问了一下在校成绩及其他情况,成绩能排到前十名不及能否打印出来,还有在学校组织过或参加过什么活动。
然后我一一回答,又说了印象最深刻的活动是在机房担任管理员,工作是修电脑保证学生来上课时,电脑是正常的,以及带学弟去帮各老师修复他们损坏的电脑、打印机等其他的外设。然后面试官又问了一下管理的时候,怎样保证电脑正常使用,学生使用后信息是否还在上面,回答中我提到了保护卡。突然感觉面试官对保护卡很感兴趣,问了我一下原理,我靠,我哪知道保护卡的原理呀,我只是会使用也没深入研究过,就随便说了下,哈哈。
在面试项目时,面试官问了一下我简历里的项目最喜欢哪一个,然后就按照这个项目进行提问面试。其中就问了我项目中的随机组卷是怎么组的,我回答前台通过点击哪科题,然后点击随机组卷访问数据库,数据库中有个SQL语句,只要设置好参数就可以随机从数据库中抽取几道题。
“select tiku.* from tiku WHERE course_id=? order by rand() limit 2”;
设计模式有23种,用于Java、c、c++等等。
1. 根据目的来分
根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。
1、创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。
2、结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。
3、行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。
2. 根据作用范围来分
根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。
1、类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。
2、对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。
3. GoF的23种设计模式的功能
前面说明了 GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍。
1、单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。(数据库源连接,服务器启动只加载一次,用到)
2、原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。
3、工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。
4、抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
5、建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。
6、代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
7、适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
8、桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
9、装饰(Decorator)模式:动态的给对象增加一些职责,即增加其额外的功能。
10、外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
11、享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。
12、组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
13、模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
14、策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
15、命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
16、职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
17、状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。
18、观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。
19、中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。
20、迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
21、访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。
22、备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。
23、解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。
必须指出,这 23 种设计模式不是孤立存在的,很多模式之间存在一定的关联关系,在大的系统开发中常常同时使用多种设计模式。
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where
范围更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ —like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
修改:update table1 set field1=value1 where 范围
左连接:SELECT * from A LEFT JOIN B ON A.id= B.id where A.id
= 1
子查询:select table1,table2 from table1 where table1 IN (select d from table2 )
项目中的一个登录角色选择问题,我大致讲解了一下,登录时选择不同角色,系统会进行判断登录及数据库查询,我三个角色建了三个表,面试官提了一下一个表也可以,加一个标记就行了。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script src="./webjars/jquery/3.1.1/jquery.min.js"></script> <%--<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>--%> <Script type="text/javaScript"> function huoQu(){ var name=document.getElementById("name"); var pwd=document.getElementById("pwd"); var name2=$("#name").val(); alert(pwd.value); alert(name.value); alert(name2); } $().ready(function () { $("#tijiao").click(function () { alert("haha"); $.ajax({ type: "post", url: "./index2.jsp", dataType: "json", date: [{"name": escape($('#pwd').val())}, {"paw": escape($('#pwd').val())}], success: function () { }, error:function () { } }); }); }); </Script> </head> <body> <h2>Hello World!</h2> <input value="张三" name="name" id="name"><br> <input value="123" name="pwd" id="pwd"> <input type="button" value="登录" onclick="huoQu()"> <input id="tijiao" name="tijiao" type="button" value="登录2"> </body> </html>
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View.
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。
1、request对象
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
2、response对象
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
3、session对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
4、application对象
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
5、out 对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6、pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
7、config 对象
config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8、page 对象
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
9、exception 对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
====================================================================================================================================
JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用
JSP九大内置对象分为四类:
输入输出对象:out对象、response对象、request对象
通信控制对象:pageContext对象、session对象、application对象
Servlet对象:page对象、config对象
错误处理对象:exception对象
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
首先
short s = 1;//这句话是没有错的
s = s+1;//问题在这,前面的s是short类型的,后面的s因为要和int型的1相加,那么s+1的返回值就是int型的,int赋给short就会出现精度下降的错误提示。
其次
short s = 1;//这句也是没有问题的
s +=1;//因为+=是操作符,s+=1 相当于:s=(s的数据类型)(s+1);即s = (short)(s+1);
索引就是提高查询速度
索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
聚集索引与辅助索引相同的是:不管是聚集索引还是辅助索引,其内部都是B+树的形式,即高度是平衡的,叶子结点存放着所有的数据
聚集索引与辅助索引不同的是:叶子结点存放的是否是一整行的信息
普通索引INDEX:加速查找
唯一索引:
-主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
-唯一索引UNIQUE:加速查找+约束(不能重复)
联合索引:
-PRIMARY KEY(id,name):联合主键索引
-UNIQUE(id,name):联合唯一索引
-INDEX(id,name):联合普通索引
方法一:创建表时 CREATE TABLE 表名 ( 字段名1 数据类型 [完整性约束条件…], 字段名2 数据类型 [完整性约束条件…], [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [索引名] (字段名[(长度)] [ASC |DESC]) ); 方法二:CREATE在已存在的表上创建索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ; 方法三:ALTER TABLE在已存在的表上创建索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ; 删除索引:DROP INDEX 索引名 ON 表名字;
方式一 create table t1( id int, name char, age int, sex enum('male','female'), unique key uni_id(id), index ix_name(name) #index没有key ); create table t1( id int, name char, age int, sex enum('male','female'), unique key uni_id(id), index(name) #index没有key ); 方式二 create index ix_age on t1(age); 方式三 alter table t1 add index ix_sex(sex); alter table t1 add index(sex);
查看 mysql> show create table t1; | t1 | CREATE TABLE t1 ( id int(11) DEFAULT NULL, name char(1) DEFAULT NULL, age int(11) DEFAULT NULL, sex enum('male','female') DEFAULT NULL, UNIQUE KEY uni_id (id), KEY ix_name (name), KEY ix_age (age), KEY ix_sex (sex) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 测试索引 1.准备 数据准备: 1. 准备表 create table s1( id int, name varchar(20), gender char(6), email varchar(50) ); 2. 创建存储过程,实现批量插入记录 delimiter $$ #声明存储过程的结束符号为$$ create procedure auto_insert1() BEGIN declare i int default 1; while(i<3000000)do insert into s1 values(i,'eva','female',concat('eva',i,'@oldboy')); set i=i+1; end while; END$$ #$$结束 delimiter ; #重新声明分号为结束符号 3. 查看存储过程 show create procedure auto_insert1\G 4. 调用存储过程 call auto_insert1(); 2.在没有索引的前提下测试查询速度 无索引:mysql根本就不知道到底是否存在id等于333333333的记录,只能把数据表从头到尾扫描一遍,此时有多少个磁盘块就需要进行多少IO操作,所以查询速度很慢 mysql> select * from s1 where id=333333333; Empty set (0.33 sec) 3.在表中已经存在大量数据的前提下,为某个字段建立索引,建立速度会很慢 mysql>create index a on s1(id); Query OK,0 rows affected(5.30 sec) Records:0 Duplicates:0 Warnings:0 4.在索引建立完毕后,以该字段为查询条件时,查询速度提升明显 mysql>select * from s1 where id = 333333333; Empty set(0.00 sec) #提速效果明显 ps: 1.mysql先去索引表根据B+树的搜索原理很快搜索到id=333333333的记录不存在,IO大大降低,因而速度明显提升 2.可以去mysql的data目录下找到该表,可以看到占用的硬盘空间变多了 3.mysql> select * from s1 where email = 'xxxx'; Empty set(0.34 sec) 没有为email加索引,因而以该字段为查询条件,速度依然很慢 5.总结 一定是为搜索条件的字段创建索引,比如select * from s1 where id = 333;就需要为id加上索引 在表中已经有大量数据的情况下,建索引会很慢,且占用硬盘空间,建完后查询速度加快 比如create index idx on s1(id);会扫描表中所有的数据,然后以id为数据项,创建索引结构,存放于硬盘的表中。 建完以后,再查询就会很快了。 需要注意的是:innodb表的索引会存放于s1.ibd文件中,而myisam表的索引则会有单独的索引文件table1.MYI
public static void main(String[] args) { int[] a=new int[]{1,2,32,4,56,6}; int t; for(int i=0;i<a.length;i++){ for (int j=0;j<a.length-i-1;j++){ if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for (int i=0;i<a.length;i++){ System.out.println(a[i]); } }
public static Map<String,Integer> jiHeTest() { List<String> list=new ArrayList<>(); list.add("张三1"); list.add("张三2"); list.add("张三3"); list.add("张三4"); list.add("张三"); list.add("张三"); if (list == null || list.size() == 0) return null; Map<String, Integer> map = new HashMap<String, Integer>(); for (String temp : list) { Integer count = map.get(temp);//Java 集合类中的 Map.get() 方法返回指定键所映射的值。如果此映射不包含该键的映射关系,则返回 null System.out.println(count); map.put(temp, (count == null) ? 1 : count + 1); } return map; }
create table student(
id int PRIMARY KEY auto_increment, #部门编号 整形 主键 自增长
name VARCHAR(10),
age int,
sex VARCHAR(2),
ctime int
);
SELECT * FROM student WHERE name LIKE '%李%'
DELETE FROM student WHERE id=1
SELECT COUNT(*) FROM student WHERE ctime=2018 AND sex=2
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL
1、后期ssm在串一边面试题,熟练掌握。
2、有关数据库的语句与优化,掌握。
3、思考清华哥分享的Java练手项目。
4、欠缺数据库优化,springmvc有点欠缺,代码不太熟练但是都会都懂。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。