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 *fromselect * from 表1 as a inner join 表2 as b on a.id=b.id 
delete fromwhere id=updateset 要改的列名 name=‘xx’where id=?
insert intovalues('','','')


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()方法时间到期销毁(此方法单位为分钟)
  服务关闭时销毁

<!---->

posted @ 2020-11-08 17:45  狒狒猴  阅读(88)  评论(0)    收藏  举报