谈谈你对spring的理解?
容器,核心组件:IOC AOP
你都用哪些集合?
ArrayList HashMap
hashtable和hashMAP的区别,那个性能高?
前者安全,效率低,不能存null 后者取反
equals和==的区别,new 出来用那个比较?
前者重写比较内容 后者内容家地址 new比较后者
MySQL和oracle的区别
最大区别,一个收费,一个不收费,不过升级后也开始收费,一个是基于数据库 一个基于用户角色
xml的有几种解析方法 DOM4J SAX解析
MySQL内连接和左外连接有什么区别?
内链接取交集 外连接肯定查出一张完整的表内容,没有的取null
为什么mysql经常使用varchar(255),
可扩展,伸缩性
mysql中int(8)什么意思?
Int类型 畅读为8
redis除了可以做缓存,还可以做什么?
Dubbo的注册中心
事务的隔离级别 传播行为
四种,传播应该是其中,mysql默认隔离级别第三级,杜绝不可重复读,幻读,传播用的最多的support和requered
solr...redis
mybatis和hibernate的区别
自己着笔记
关于springmvc的东西 如何进行数据封装,传入传出的格式(key-value,json)
自定义json转换工具
项目如何实现底层通信
什么叫底层通信。
如何实现批量添加批量删除
Mybaits自带foreach标签遍历传来的数组,批量底层都是遍历后一个个执行
类如何实现序列化
实现序列化接口
在mybatis中$和# 的区别:
1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
3. #方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.
使用的spring的版本
4.1.7
提交的方式是表单还是json
表单
项目用了多少个服务器
没上线,开发阶段用的电脑主机做服务器,我负责的模块用了4 、5台
你负责了那些模块
优化数据库的方法
http://zhidao.baidu.com/link?url=XMyi2dxlphbzaRrMjscwPXR3c5gbZ8TwaS8g6bAeSTMHH7c_NnJYMG0JXB6RtSPaWpgmckxWBAwEgQcafU_93a
spring的配置文件中都配置了什么
事务,三层架构的创建,数据源 redis sorl 图片服务器配置
如何解决高并发的问题
集群,负载均衡 缓存 加硬件设备
为什么离职
集合相关的东西
其实面试主要就是框架 事务 项目
实现图片上传需要指定enctype=multipart/form-data;
二、利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
Mysql设置事物的隔离级别
mysql> set tx_isolation='read-committed'
默认隔离级别:Repeatable Read
Session、application、request区别
2.request 指在一次请求的全过程中有效,即从http请求到服务器处理结束,返回响应的整个过程,存放在HttpServletRequest对象中。在这个过程中可以使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。
3.Session是用户全局变量,在整个会话期间都有效。只要页面不关闭就一直有效(或者直到用户一直未活动导致会话过期,默认session过期时间为30分钟,或调用HttpSession的invalidate()方法)。存放在HttpSession对象中
4.application是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它们就一直可以使用
总结:当数据只需要在下一个forward有用时,用request就够了;
若数据不只是在下一个forward有用时,就用session。
Jsp和Servlet的区别:
JSP在本质上就是SERVLET,但是两者的创建方式不一样.
Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑。
Servlet的线程是不安全的:
解决springMVC的线程问题:
有几种解决方法:
1、在Controller中使用ThreadLocal变量
2、在spring配置文件Controller中声明 scope="prototype",每次都创建新的controller
所在在使用spring开发web 时要注意,默认Controller、Dao、Service都是单例的。
mybatis如何实现多表查询:
多表查询和单表没有任何区别,只是你需要一个对象接收返回值时,同时包括多个表的结果字段才行。其他没区别。mybatis本身不会判读是否是多表查询。
mybatis如何实现批量插入:
Xml代码
<insert id="addTrainRecordBatch" useGeneratedKeys="true" parameterType="java.util.List">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into t_train_record (add_time,emp_id,activity_id,flag)values
<foreach collection="list" item="item" index="index" separator=","
(#{item.addTime},#{item.empId},#{item.activityId},#{item.flag})
</foreach>
</insert>
对于foreach标签的解释参考了网上的资料,具体如下:
foreach的主要用在构建in条件中,它可以在SQL语句 中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
关于foreach的具体例子在这里就先不举,以后有机会可以把每一种情况都举一个例子列出来。
mysql数据库的优化
1、表的设计要符合三范式。
2、添加适当的索引,索引对查询速度影响很大,必须添加索引。主键索引,唯一索引,普通索引,全文索引
3、添加适当存储过程,触发器,事务等。
4、读写分离(主从数据库)
5、对sql语句的一些优化,(查询执行速度比较慢的sql语句)
6、分表分区
分表:把一张大表分成多张表。分区:把一张表里面的分配到不同的区域存储,
7、对mysql服务器硬件的升级操作。
List、set、map区别:
Nginx负载均衡:
修改nginx.conf
upstream tomcat1{
#weight 权重,默认是1,权重越高,被分配的几率越大
server 192.168.242.129:8080 weight=2;
server 192.168.242.129:8282;
}
#配置一个虚拟主机
server {
listen 80;
server_name www.tomcat1.com;
location / {
proxy_pass http://tomcat1;
}
}
Maven解决依赖冲突问题:
打开maven的pom.xml,在某个<dependency>中通过右键菜单:maven->show dependency 打开分析的图形化页面,如下所示:
通过菜单的exclude即解决这个间接依赖。
<!-- 此标签的作用是可以将B的传递依赖关系A不传递给C -->
<!-- <exclusions> <exclusion> <groupId>org.lonecloud.A</groupId> <artifactId>A</artifactId>
</exclusion> </exclusions> -->
redis中的事务和mysql中的事务有什么区别?
1、Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行。Redis事务的实现需要用到 MULTI 和 EXEC 两个命令,事务开始的时候先向Redis服务器发送 MULTI 命令,然后依次发送需要在本次事务中处理的命令,最后再发送 EXEC 命令表示事务命令结束。
2、mysql的事务特性,要求这组操作,要不全都成功,要不全都失败,这样就避免了某个操作成功某个操作失败。利于数据的安全
http请求由三部分组成,分别是:请求行、消息报头、请求正文
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
socket有几种状态
CLOSED
没有使用这个套接字
LISTEN
套接字正在监听入境连接
SYN_SENT
套接字正在试图主动建立连接
SYN_RECEIVED
正在处于连接的初始同步状态
ESTABLISHED
连接已建立
CLOSE_WAIT
远程套接字已经关闭:正在等待关闭这个套接字
FIN_WAIT_1
套接字已关闭,正在关闭连接
CLOSING
套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认
LAST_ACK
远程套接字已关闭,正在等待本地套接字的关闭确认
FIN_WAIT_2
套接字已关闭,正在等待远程套接字关闭
TIME_WAIT
这个套接字已经关闭,正在等待远程套接字的关闭传送
java交换两个数的位置不用第三个变量
方法2:使用+,-操作来实现
int x = 10;
int y = 15;
System.out.println("x="+x+" y="+y);
x = x+y;
//x= 10+15=25
y = x-y;
//y= 25-15=10
x = x-y;
//x= 25-10=15
System.out.println("x="+x+" y="+y);
结果:
x=10 y=15
x=15 y=10
字符串倒叙输出:
String str = "abcd";
// 字符串倒序方法一
char[] ch = str.toCharArray();
StringBuffer sb = new StringBuffer();
for (int i = ch.length - 1; i >= 0; i--) {
sb.append(ch[i]);
}
System.out.println(sb.toString());
// 字符串倒序方法二
StringBuffer sbb = new StringBuffer();
for (int i = str.length() - 1; i >= 0; i--) {
sbb.append(str.charAt(i));
}
System.out.println(sbb.toString());
// 字符串倒序方法三
System.out.println(new StringBuffer(str).reverse().toString());
}
Jvm运行原理:
去除数组中相同的元素:
public static void main(String[] args){
//定义一个有重复元素的数组
int[] arr={0,4,2,4,6,1,2,4,7,8};
//考虑到要去除重复元素,想到Set集合可以除去重复元素
TreeSet ts=new TreeSet();
//所以遍历数组,并添加到Set集合中,这样便去除了当中的重复元素
for(int x=0;x<arr.length;x++){
if(arr[x]==0)
continue;
ts.add(arr[x]);
}
System.out.println(ts);
}
去除list集合中的重复元素:
1、通过循环进行删除
public static void removeDuplicate(List list) {
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) {
for ( int j = list.size() - 1 ; j > i; j -- ) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println(list);
}
Java设计模式
普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建
单例模式:单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式
装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例
代理模式就是多一个代理类出来,替原对象进行一些操作,比如我们在租房子的时候回去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做,此处的代理就是这个意思
桥接模式就是把事物和其具体实现分开,使他们可以各自独立的变化。桥接的用意是:将抽象化与实现化解耦,使得二者可以独立变化,像我们常用的JDBC桥DriverManager一样,JDBC进行连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不用动,原因就是JDBC提供统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了。
观察者模式::当一个对象变化时,其它依赖该对象的对象都会收到通知,并且随着变化!对象之间是一种一对多的关系。
Maven+tomcat热部署使用方法
使用maven+tomcat对taotao-sso工程进行热部署。
前提:需要启动dubbo的监控中心,来监测服务层服务是否发布成功。
第一步:需要在maven工程的pom文件中添加tomcat7插件,然后配置以下属性:
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8087</port>
<path>/</path>
<!-- 配置tomcat服务器的配置URL -->
<url>http://192.168.242.195:8080/manager/text</url>
<username>tomcat</username>
<password>tomcat</password>
</configuration>
</plugin>
</plugins>
</build>
第二步:执行maven命令,进行热部署。
第一次部署命令:tomcat7:deploy
第二次部署命令:tomcat7:redeploy。
跳过单元测试命令:tomcat7:redeploy -DskipTests
第三步:访问dubbo注册中心,查看是否将sso服务发布成功。
Ajax的优缺点:
优点:减轻服务器的负担,按需取数据,最大程度的减少冗余请求
局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验
基于xml标准化,并被广泛支持,不需安装插件等
进一步促进页面和数据的分离
缺点:AJAX大量的使用了javascript和ajax引擎,这些取决于浏览器的支持.在编写的时候考虑对浏览器的兼容性.
AJAX只是局部刷新,所以页面的后退按钮是没有用的.
对流媒体还有移动设备的支持不是太好等
防止刷新页面表单重复提交:Ways One
一个是设置验证码,另一个方法是在表单某个字段可以设置:不允许重复。即可避免。表单大师以上两点都能做到。
防止用户后退
这里的方法是千姿百态,有的是更改浏览器的历史纪录的,比如使用window.history.forward()方法;有的是 “用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后退按钮永远不会变为可用。”比如使用
javascript:location.replace(this.href); event.returnValue=false;
Redis重启数据会消失吗?
Redis 默认设置会开启 RDB 持久化。
有另一种持久化 AOF,两种持久化可以同时开启。
·
<!--连接池中保留的最大连接数。默认值: 15 -->
· <property name="maxPoolSize" value="20"/>
· <!-- 连接池中保留的最小连接数,默认为:3-->
· <property name="minPoolSize" value="2"/>
Linkedlist怎样才能查询和增删都快?
创建成map集合,key存下标值
线程A里面的方法调用线程B,怎样才能执行线程A后先执行线程C,再执行线程B(C和A、B没有关系)?
在controller中没有做异常处理,在不改变controller代码的情况下,怎样统一处理异常?
自定义异常处理类。
在controller中调用一个service接口,但是后来发现service接口的方法需要扩展,不改变controller不改变service怎样实现?
1、aop思想
为什么limit 1-100和9900-10000的效率不一样(原理)?
9900-10000需从头开始找第9900条。
---------------------
作者:多纤果冻
来源:CSDN
原文:https://blog.csdn.net/qq_37939251/article/details/83068606
版权声明:本文为博主原创文章,转载请附上博文链接!