Java基础
1.spring MVC的执行流程:
1.发送请求到前端控制器
2.委托请求给处理器到页面控制器
3.调用业务对象
4.模型处理数据返回页面控制器
5.返回ModelAndView到前端控制器
6.带着Model数据渲染试图
7.试图返回控制到前端控制器
8.响应给用户
2.springMVC常用的注解
@Mapping
@Controller 标注此类是一个Controller控制器
@GetMapping 处理Get请求
@PostMapping 处理Post请求
@RequestMapping
@PathVariable 接收路径的传值
@RequestParam 获取页面的值
@ResponseBody 返回JSON数据到页面
3.springMVC参数传递
ModelAndView
返回ModelAndView
Map
map存到request域中
Model
model.addAttribute
4.IOC AOP
ioc也称为控制反转,作用是:
将创建对象,属性赋值的方式进行了反转,mew对象反转为从容器中getBean
依赖注入:
属性值注入给属性,属性注入给他bean,Bena注入到ico容器
是一个spring的容器,可以降低项目的耦合度实现类与类之间的无依赖性,
Aop是面向切面编程:
<!---->
<bean id="studentDao" class="cn.ph.dao.impl.StudentDaoimpl"></bean>
<bean id="studentService" class="cn.ph.serviceImpl.StudentServicecImpl">
<property name="studentDao" ref="studentDao"></property>
</bean>
<!--通知所在的类 ==连接线的一方-->
<bean id="logBefore" class="cn.ph.aop.LogBefore"/>
<!--将方法 和通知类 进行关联-->
<aop:config>
<!--配置切入点 (就是在哪里执行)
3 ==连接线的另一方-->
< aop:pointcut id="pointcut" expression="
execution(public void cn.ph.serviceImpl.StudentServicecImpl
.deletestudnet(int)) or
execution(public void cn.ph.serviceImpl.StudentServicecImpl
.addStudent(cn.ph.entity.Student))"/>
<!--相当于连接切入点和-切面的线 ==连接线-->
<aop:advisor advice-ref="logBefore" pointcut-ref="pointcut"/>
</aop:config>
5.SQL语句分页:
31-40条数据
MySQL
limit
select * from 表 limit 30,10
Oracle
rwonum
SELECT * FROM (SELECT rwonum r,* form 表 r<=40)where r>30
SQL server
top
Select Top 10 *from 表 where id not in(select top 30 id from 表 order by id)
6.List与Set的区别:
都继承Collection接口
List:有序,允许重复,适合追加数据,插入和删除,随机取数据效率低
Set:无需,不允许重复,适合随时存储,插入和删除,遍历数据效率低
7.==和equls()的区别:
int a =12; b=12; ==true ==是比较变量值是否相等,比较两个基本数据类型或两个引用变量是否相等 User u1=new User(); User u2=new User(); u1==u2 false u1.equals(u2) false equals(ages)方法在Object类中,方法返回的是this(当前对象)== ages Object public boolean equals(Object obj){ return (this == obj); } String s1="aaa"; String s2=new String("aaa"); s1==s2 false s1.equals(s2) true 因为在String方法中 重写了equals方法 String public boolean equals(Object anobj){ if(this == anobj)){ return true; } if(anobj instanceof String ){ String anoString=(String) anobj ; int n=value.legth; if(n == anoString.value.legth){ cahr v1[] = value; char v2[] =anoString.value; int i=0; while(n-- !=0){ if(){ return false; i++; } return true; } } return false; } }
8.重载与重写的区别:
重写(Override):首先是必须有继承关系,并且是子类继承父类,子类重写父类方法 方法名,参数列表,返回值都与父类相同
重写的方法在子类中不能是private ,否则被视为新定义的方法,
重载(Overload):在同一类中,方法名相同,参数列表不同
9.Spring的依赖方式:
1.set方法注入 <bean id = "UserService" class="org.ph.ServiceImpl.UserServiceImpl"> <property name = "userDao" ref = "userdao" > </property> </bean> <bean id= "userdao" class="dao"> </bean> 2.构造器方式注入 <bean id = "UserService" class="org.ph.ServiceImpl.UserServiceImpl"> <constructor-arg index = "0" ref = "userdao" > </constructor> </bean> <bean id= "userdao" class="dao"> </bean> 3.注解方式 @Resource
10.基本的CURD
select *from 表 select * from 表1 as a inner join 表2 as b on a.id=b.id delete from 表 where id=? update 表 set 要改的列名 name=‘xx’where id=? insert into 表 values('','','')
11.使用session怎么把用户信息放入session?怎么获取用户信息?
Servlet:request.getSession().setAttribute("user",user);
获取session的值:request.getSession.getAttribute("user");
12.Ajax
局部刷新,减轻服务器压力
IE5.0以上,火狐1.0以上,才支持Ajax,Ajax还会使网页后退功能失效
type: 数据的提交方式 get/post
url: 提交的路径
data: 提交的数据
datatype: 返回的数据类型 text html json xml
sueccess: 成功后的回调函数
error: 失败错误的回调函数
async: 是否支持异步刷新 默认true
13.springBena的作用域
Singleton:单例,springioc容器中会有一个共享的bean 无论有多少个bean引用它,始终都是指向这一个对象
prototype:原型,多例,每次用都是新的一个对象,对有状态的bean使用prototype,无状态的使用singleton
request: 一次HTTP请求,对不同的HTTP请求会生产新的bean,并且仅在当前HTTP request内有效,
session: 一次会话,对不同的session请求会创建新的实例,该bean仅在当前session内有效,每一次请求的新的实例,而不同实例之间不共享属性,并且仅在自己的session请求有效,请求结束,就销毁
global session:在一个全局的HTTP session中 容器会返回该bean的同一个实例,仅在使用portlet context时有效
14.springController的返回值
ModleAndview:对象中可以添加model数据 指定view试图
String:返回逻辑视图名
void:
redirect:重定向,浏览器的url路径会改变,request不能共享
forward:转发,浏览器url不变 request可以共享
15.线程与进程的区别?怎么实现线程同步?
进程是独立的表先在内存空间,上下文环境;线程运行在进程空间内
1/地址空间:进程内的一个执行单元,进程至少有一个线程,它们共享进程的地址空间,而进程有自己的独立地址空间
2/资源拥有:进程是资源分配和拥有的单位,同一个进程内共享进程的资源。
3/线程是处理器调度的基本单位,单进程不是
4/二者都可并发执行
16.Java程序怎么优化
1.避免在循环条件中使用复杂的表达式
2.尽量使用指定类的final修饰符,带有final修饰的类不可派生
3.尽量重用对象
4.尽量使用局部变量,调用方法传参数时以及在调用中创建的临时变量都保存在栈中,速度快
5.数据库连接,io操作要及时释放资源
17.SQL语句的优化
使用索引
少用*
like查询时使用xx%开头的查询方式,这会避免全表查询
减少子查询的层数
尽可能在子查询中进行数据筛选
尽量使用数字型字段,字符型会降低查询和连接的性能,并增加存储开销/因为引擎在处理查询和连接时会逐个比较字符中的每个字符,而数字只需比较一次
18.什么是动态代理?
动态代理可以提供另一个对象的访问,同时隐藏实际对象的具体事实,代理一般会实现被代理对象的接口,代理可以访问实际对象,
但是延迟实现实际对象的部分功能,代理对象隐藏实际对象,客户不知道他是与代理打交道还是实际对象打交道
19.单例模式
单例模式分为懒饿汉式
懒汉:在类加载时不初始化,比较懒。先甜后苦
饿汉:在类在加载时就完成了初始化,他比较饿,这会使类加载慢。但获取对象快。先苦后甜
实现方式:
懒汉: 1.线程不安全 private static SingletDemo instance; private SingletDemo(){} public static SingletDemo getInstance(){ //类加载不初始化,调用的时候在new出来 if(instance == null){ instance = new SingletDemo(); } return instance; } 2.线程安全的: 加上synchronized public static synchorzed SingletDemo getInstance(){ if(instance == null){ 饿汉: //类加载就初始化 private static SingletDemo instance = new SingletDemo(); private SingletDemo(){} public static SingletDemo getInstance(){ return instance; }
20.spring用到了那些设计模式
1.简单工厂 又叫静态工厂方法(StaticFactory Method)模式
2.工厂方法(Factory Method)
3.单例模式(Singleton)
4.适配器(Adapter)
5.包装类(Decorator)
6.代理(Proxy)
7.观察者(Observer)
8.策略(Strategy)
9.模板方法(Template Method)
String,StringBuffer和StringBuidler的区别:
共同点:都是final类 不能别继承,
不同点:
快慢:StringBuilder > StringBuffer > String。
String最慢的原因是:String字符串是常量,字符串不能改变,Java对String的操作实际上都是
创建新的对象并且把旧对象进行回收,所以执行慢
StringBuffer和String Builder都是继承自同一个抽象类,基本方法都是一样,实现几乎也一样
StringBuffer比String Builder效率低的原因是String Buffer的方法几乎都加了synchronized
总结:
在只有少量字符串操作时 建议使用String
有大量字符串操作时,如果是单线程 使用String Builder,但涉及到多线程操作同一个字符串时,请使用String Buffer
session的持久化:
何时创建:
默认第一次访问时,使用到了HTTPSession就会创建(request.getSession),
访问JSP时就会自备九大内置对象,因此也会创建session
session何时销毁:
当session存货时间到期时销毁(默认30分钟)
可以在web.xml中配置存活时间
<session-config>
<!--单位:分钟-->
<session-itmeout>30</session-itmeout>
</session-config>
调用session的invalidate()方法时间到期销毁(此方法单位为分钟)
服务关闭时销毁
<!---->

浙公网安备 33010602011771号