2者基本区别解析 java引用传递和值传递的区别( 二 )


page :当前页面有效时间最短(页面执行期)request :HTTP请求开始到结束这段时间session :HTTP会话开始到结束这段时间application :服务器启动到停止这段时间九大内置对象:
request:请求对象作用域 Requestresponse:响应对象 作用域 PagepageContext :页面上下文对象 作用域 Pagesession :会话对象 作用域 Sessionapplication :应用程序对象 作用域 Applicationout :输出对象 作用域 Pageconfig :配置对象 作用域 Pagepage :页面对象 作用域 Pageexception :例外对象 作用域 pagejsp和servlet的区别
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest象,HttpServletResponse对象以及HttpServlet对象得到.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成 。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应 。servlet生命周期
1.加载和实例化2.初始化3.请求处理4.服务终止加载(服务器启动时,会到web.xml文件中去找到Servlet文件的配置并创建servlet的实例) →初始化(init()此方法只执行一次) →执行(service(),doGet(),doPost()) →销毁(销毁destory())service():方法本身包含了doGet()和doPost().如果服务器发现了service()方法,则不再执行doGet(),doPost().一般不建议去重写父类的service方法.因为重写了此方法doGet方法和doPost方法将得不到利用.没有service()方法默认执行doGet()方法.cookie和session区别以及JWT与Session的差异
1、cookie数据存放在客户的浏览器上,session数据放在服务器上 。2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session 。3、session会在一定时间内保存在服务器上 。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie 。4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie 。5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中 。1.Session是在服务器端的,而JWT是在客户端的 。2.Session方式存储用户信息的最大问题在于要占用大量服务器内存,增加服务器的开销 。3.JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力 。4.Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端 。JWT与OAuth的区别OAuth2是一种授权框架,JWT是一种认证协议 。无论使用哪种方式切记用HTTPS来保证数据的安全性OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, github登录某个app)JWT是用在前后端分离, 需要简单的对后台API进行保护时使用 。Cookie和LocalStorage和sessionStorage的区别转发和重定向的区别转发:浏览器地址栏不变,1次请求,request请求,可以访问web-inf,可以共享request请求域数据,只能跳转工程内的资源
重定向:浏览器变化,2次请求,response响应,不能访问web-inf,不可以共享request请求域数据,可以跳转任意资源
饿汉于懒汉单例模式单例模式设计:第一步:私有化构造器第二步:提供一个公共静态返回该类实例对象的方法 饿汉式:先初始化对象,Single类一进内存,就已经创建好了对象 。class Single{private Single(){}private static Single s=new Single();public static Single getInstance(){returns;}}懒汉式:对象是方法被调用时,才初始化,也叫做对象的延时加载 。class Single{//Single类进内存,对象还没存在,只有调用了getInstance方法时,才建立对象private Single(){}private static Single s=null;public static synchronize Single getInstance(){if(s==null){s=new single();}returns;}}操作共享的数据有多条,会出现线程安全问题,在方法加一个同步过滤器和拦截器的区别①拦截器是基于java的反射机制的,而过滤器是基于函数回调 。②拦截器不依赖与servlet容器,过滤器依赖与servlet容器 。③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用 。④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问 。⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次 。⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑 。#和$的区别#{}和${}的区别#{} 在mapper的配置文件的sql语句中,它是占位符,相当于 ? 号 。${} 在 mapper 的配置文件的 sql 语句中,它是原样输出变量的值,然后以字符串拼接的功能进行操作 。${} 中只能写value,或者是@Param命名参数后的参数名称在输出参数的时候,我们并不推荐使用 ${} 来输出 。因为可能会导至 sql 注入问题的存在 。什么是SQL注入?如果SQL是根据用户输入拼出来,如果用户故意输入可以让后台解析失败的字符串,这就是SQL注入例如,用户在输入密码的时候,输入' or 1=1', 这样,后台的程序在解析的时候,拼成的SQL语句,可能是这样的: select count(1) from tab where user=userinput and pass='' or 1=1;看这条语句,可以知道,在解析之后,用户没有输入密码,加了一个恒等的条件 1=1,这样,这段SQL执行的时候,返回的 count值肯定大于1的,如果程序的逻辑没加过多的判断,这样就能够使用用户名 userinput登陆,而不需要密码 。防止SQL注入,首先要对密码输入中的单引号进行过滤,再在后面加其它的逻辑判断,或者不用这样的动态SQL拼 。&&和&与|和||的区别?&和&&的区别?&和&&左边的式子为true的时候,右边的式子都会执行 。左边的式子为false的时候 。&右边的式子仍然会执行 。&&右边的式子将不再执行 。|和||的区别?|和||左边的式子为false的时候,右边的式子都会执行 。左边的式子为true的时候 。|右边的式子仍然会执行 。||右边的式子将不再执行 。final finally finalize区别? final修饰符,用来修饰变量,方法和类,分别表示属性不可变,方法不可被重写,类不可被继承,finally是异常语句中处理语句,表示总是执行;finalize表示在垃圾回收机制时使该对象状态恢复的方法int和Integer的区别?1、Integer是int的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4、Integer的默认值是null,int的默认值是0equals与==的区别?==:如果==两边是基本数据类型,那么比较的是具体的值 。如果==两边是引用数据类型,那么比较的是地址值 。(两个对象是否指向同一块内存) equals:如果没有重写equals方法那么调用的是Object中的equals方法,比较的是地址值 。如果重写了euqlas方法(比属性内容)那么就比较的是对象中属性的内容 。StringBuff 和StringBuilder及String区别?String类是不可变类,任何对String的改变都会引发新的String对象的生成;StringBuffer是可变类,任何对它所指代的字符串的改变都不会产生新的对象,线程安全的 。StringBuilder是可变类,线性不安全的,不支持并发操作,不适合多线程中使用,但其在单线程中的性能比StringBuffer高 。Override和Overload的含义去区别?1. Override 特点1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、方法被定义为final不能被重写 。5、对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重写覆盖,如果定义的话,也只是定义了一个新方法,而不会达到重写覆盖的效果 。(通常存在于父类和子类之间 。)2.Overload 特点1、在使用重载时只能通过不同的参数样式 。例如,不同的参数类型,不同的参数个数,不同的参数顺序当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float),但是不能为fun(int, int)2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;4、重载事件通常发生在同一个类中,不同方法之间的现象 。5、存在于同一类中,但是只有虚方法和抽象方法才能被覆写 。抽象类和接口及普通类的区别?1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象 。2、抽象类要被子类继承,接口要被类实现 。3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量 。5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类 。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类 。6、抽象方法只能申明,不能实现,接口是设计的结果,抽象类是重构的结果7、抽象类里可以没有抽象方法8、如果一个类里有抽象方法,那么这个类只能是抽象类9、抽象方法要被实现,所以不能是静态的,也不能是私有的 。10、接口可继承接口,并可多继承接口,但类只能单根继承 。堆和栈的区别?一.堆栈空间分配区别:1.栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等 。其操作方式类似于数据结构中的栈;2.堆(操作系统): 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表 。二.堆栈缓存方式区别:1.栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放;2.堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收) 。所以调用这些对象的速度要相对来得低一些 。三.堆栈数据结构区别:堆(数据结构):堆可以被看成是一棵树,如:堆排序;栈(数据结构):一种先进后出的数据结构 。Spring Bean生命周期实例化bean对象


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: