学习笔记(一)

1.Application和Session和Cookie

方法信息量大小保存时间应用范围保存位置
Application任意大小整个应用程序的生命期所有用户服务器端
Session小量,简单的数据用户活动时间+一段延迟时间(一般 为20分钟)单个用户服务器端
Cookie小量,简单的数据可以根据需要设定单个用户客户端
Viewstate小量,简单的数据一个Web页面的生命期单个用户客户端
Cache任意大小可以根据需要设定所有用户服务器端
隐藏域小量,简单的数据一个Web页面的生命期单个用户客户端
查询字符串小量,简单的数据直到下次页面跳转请求单个用户客户端
Web.Config文件不变或极少改变的小量数据直到配置文件被更新单个用户服务器端

1.1、Application对象

  • Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_On Start事件(global.asax)中完成.尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合.

1.2、Session对象

  • Session采用键值对 , 也就是说ID存放客户端 , 而值放在服务器端 , 是通过用户的ID去找服务器上对应的值 , 这种方式值放置在服务器端 ,有个时间限制 ,时间到则服务器自动释放。

  • Session中的信息保存在服务器的内存中,当然你也可以设置它的保存方法(如存在SQL数据库中)。

  • Session用于保存每个用户的专用信息。它的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右)。

  • Session中的信息保存在Web服务器内容中,保存的数据量可大可小。当Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低。对于小量的数据,使用Session对象保存还是一个不错的选择。

1.3、Cookie对象

  • Cookie对象保存在客户端Session和Application对象保存在服务器端。

  • 所有Cookie对象能够长期保存,Web应用程序可以通过获取客户端的Cookie值来判断用户的身份来进行验证。

  • 无需任何服务器资源。 缺点,大小限制,如果客户端配置禁止Cookie设置,则被限制使用,安全风险,可以伪装。

  • Name:获取或设置Cookie的名称

    Value:获取或设置Cookie的Value

    Expires:获取或设置Cookie的过期的日期

    Version:获取或设置Cookie符合的HTTP维护状态的版本

  • Add:增加Cookie变量

    Clear:清除Cookie集合内的变量

    Get:通过变量名称或索引得到Cookie的变量值

    Remove:通过Cookie变量名或索引删除Cookie对象

  • Cookies则有两种方法 , 一种方法是把值保存在浏览器的变量中 , 当浏览器关闭时结束 , 另一种方法是保存在硬盘中 , 只要时间不过期 , 下次还可使用.
    Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置。如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止。如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期。Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4096,因此不要用来保存数据集及其他大量数据。由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的未加密的数据,否则会影响网站的安全性。

2.Servlet和JSP的区别

  • jsp本质上是一个 servlet
  1. 组成形式不同:servlet 看做是含有HTML的Java程序; JSP 看做是含有Java代码的HTML页面。servlet在java代码中通过httpservletresponse来动态的生成一个html页面 ;jsp是通过吧java代码嵌入到html中去生成一个动态的html页面 。
  2. 生成周期不同: jsp 需要先解析,然后才翻译成 servlet, 之后具有servlet 相同的生命周期
  3. 业务方向不同 : servlet擅长擅长于流程控制,数据处理,如读取并检查数据,与数据库通信,调用商业逻辑,等等;JSP擅长表示,即构建HTML来表示请求的结果,视图展示。

Servlet的生命周期

1,初始化阶段 调用init()方法

2,响应客户请求阶段  调用service()方法

3,终止阶段  调用destroy()方法

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求。所以Servlet是线程不安全的

有几种方法可以实现Servlet线程安全:
1,实现 SingleThreadModel 接口的servlet是线程安全的
2,用synchronized同步对共享数据的操作
3,避免使用实例变量

Servlet的优势在于多线程,高并发。第一种方法其实就是扼杀了其并发性能,所以不推荐在高并发的业务环境下使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8Vpf8Ox-1623053372080)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20210421172044906.png)]

Jdk和Jre和JVM的区别

  • Jdk包括了Jre和Jvm,Jre包括了Jvm
  • Jdk是我们编写代码使用的开发工具包
  • Jre 是Java的运行时环境,他大部分都是 C 和 C++ 语言编写的,他是我们在编译java时所需要的基础的类库
  • Jvm俗称Java虚拟机,他是java运行环境的一部分,它虚构出来的一台计算机,在通过在实际的计算机上仿真模拟各种计算机功能来实现Java应用程序

在这里插入图片描述

Java启动线程的方法

第一种:继承Thread类, 重写run方法,在main函数中,调用start方法。

通过继承Thread类来创建并启动多线程步骤如下:

1、定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。因此把run方法称为线程执行体。

2、创建Thread子类的实例,即创建了线程对象。

3、调用线程对象的start()方法来启动该线程。

第二种:实现Runnable接口a,然后新建当前类对象,接着新建Thread对象时把当前类对象传进去(Thread b = new Thread(a)),最后运行Thread对象的start()方法

第三种:实现Callable接口,新建当前类对象a,在新建FutureTask类对象时传入当前类对象(FutureTask b = new FutureTask(a)),接着新建Thread类对象时传入FutureTask类对象(Thread c = new Thread(b)),最后运行Thread对象的start()方法

进程和线程的区别

进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。

线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内存和其他资源。

img

8大基本类型

在这里插入图片描述

集合特性比较

15f7f38b65bd1e324a688c6c5d270f4c.png

MQSQL事务的四个特性

  • **原子性:**一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • **一致性:**在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • **隔离性:**数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  • **持久性:**事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

面向对象思想

“面向对象”就是从“组织者”的角度思考问题,比如更注重组织哪些工具来完成一个任务,找谁来帮我们做这件事,调用其中提供的方法即可。

  • 封装:首先需要将事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系;这样一来,当内部的逻辑发生变化时,外部调用不用发生修改,只需要调用开放的接口,而不需要关心内部的实现。

img

HashMap和HashTable之间的区别

1.共同点:都是双列集合,底层都是哈希算法

2.区别:

  • 1.HashMap是线程不安全的,效率高,JDK1.2版本
  • Hashtable是线程安全的,效率低,JDK1.0版本
  • 2.HashMap可以存储null键和null值
  • Hashtable不可以存储null键和null值

Mybatis面试题

https://blog.youkuaiyun.com/a745233700/article/details/80977133

Servlet面试题

https://blog.youkuaiyun.com/qq_41552331/article/details/105902030

https://blog.youkuaiyun.com/Jeff_Seid/article/details/80761076

Equals和==的区别

  1. 对于 “==” :
  • 如果作用于 “基本数据类型” 的变量,则直接比较其存储的 “值”;
  • 如果作用于 “引用类型” 的变量,则比较的是所指向的对象的地址。
  1. 对于 equals() 方法:

(注意:equals() 方法不能作用于基本类型的变量,但基本类型对应的包装类是可以的)

  • 如果没有对 equals() 方法进行重写,比较的是引用类型的变量所指向的对象的地址;
  • 如果对 equals() 方法进行了重写,则比较的是所指向的对象的内容(如:String、Date类等)
  1. 请解释下字符串比较之中 “==” 和 equals() 的区别?
  • ==:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
  • equals():比较的是两个字符串的内容,属于内容比较。

equals 与 hashCode

前提: 谈到hashCode就不得不说equals方法,二者均是Object类里的方法。由于Object类是所有类的基类,所以一切类里都可以重写这两个方法。

原则 1 : 如果 x.equals(y) 返回 “true”,那么 x 和 y 的 hashCode() 必须相等 ;
原则 2 : 如果 x.equals(y) 返回 “false”,那么 x 和 y 的 hashCode() 有可能相等,也有可能不等 ;
原则 3 : 如果 x 和 y 的 hashCode() 不相等,那么 x.equals(y) 一定返回 “false” ;
原则 4 : 一般来讲,equals 这个方法是给用户调用的,而 hashcode 方法一般用户不会去调用 ;
原则 5 : 当一个对象类型作为集合对象的元素时,那么这个对象应该拥有自己的equals()和hashCode()设计,而且要遵守前面所说的几个原则。

JDK1.8新特性

https://blog.youkuaiyun.com/hequan199411/article/details/81713827

Super注意点:

1. super调用父类的构造方法,必须是构造方法里的第一条语句
2. super必须只能出现在子类的方法或者构造方法中
3. super和this不能同时调用构造方法

和this的区别

  1. 代表的对象不同:

    this:本身调用者的这个对象

    super:代表父类对象的应用

    1. 前提:

    this:没有继承关系也能用

    super:只能在继承条件下才能用

    1. 构造方法:

    this():本类的构造方法

    super():父类的构造方法

重写:需要有继承关系,子类重写父类的方法

1. 方法名必须相同
2. 参数列表必须相同
3. 修饰符:范围可以扩大但不能缩小   public>protected>default>private
4. 抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException   -->  Exception(大)

为什么要重写

​ 父类的功能,子类不一定需要,或者不一定满足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值