Java基础概念
C了个常
唯一不变的就是变化
展开
-
java每日5问(第56天)
高并发情况下,我们系统是如何支撑大量的请求的?1、尽量使用缓存技术,包括用户缓存,信息缓存还有静态页面缓存,多花点内存来做缓存,可以大大减少与数据库 的交互次数和 tomcat 执行次数,减少不变的数据重复在 tomcat 和数据库中获取的次数。2、同步转异步,对于一些不需要即时结果的操作,可以使用 MQ 消息机制,达到同步转异步的效果,如秒杀系统,正常流程:先点击秒杀,然后往服务器发送请求,在页面等待响应,这样融入大量请求,服务器压力会特别大,搞不好服务器就会宕机。使用 MQ 消息队列实现异步原创 2020-08-14 10:32:37 · 97 阅读 · 0 评论 -
java每日5问(第55天)
Hash 索引和 B+树索引的区别?hash 索引,等值查询效率高,不能排序,不能进行范围查询;B+树数据有序,范围查询MySQL 三种锁的级别表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁 之间,并发度一般为什么不都用 Hash 索引而使用 B+树索引?索引查找过程中就要产生磁盘 I/O 消耗原创 2020-08-13 13:50:25 · 56 阅读 · 0 评论 -
java每日5问(第54天)
count(*)、count(1)、count(column)的区别count()对行的数目进行计算,包含 NULLcount(column)对特定的列的值具有的行数进行计算,不包含 NULL 值。count()还有一种使用方式,count(1)这个用法和 count()的结果是一样的。什么是索引?数据库索引,是数据库管理系统中一个排序的数据结构,索引的实现通常使用 B 树及其变种 B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可原创 2020-08-12 19:07:57 · 62 阅读 · 0 评论 -
java每日5问(第53天)
MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景?事务处理上方面MyISAM:强调的是性能,每次查询具有原子性,其执行数度比 InnoDB 类型更快,但是不提供事务支持。InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback) 和崩溃修复能力(crash recovery capabilities) 的事务安全(transaction-safe (ACID compliant))型表。锁级别MyISAM原创 2020-08-11 13:42:59 · 95 阅读 · 0 评论 -
java每日5问(第52天)
什么叫视图?游标是什么?视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,试图 通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取 数据更容易,相比多表查询。游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行, 从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。视图的优缺点优点:1 对数据库的访问,因为视图可以有选择性的选取数据原创 2020-08-09 22:13:56 · 144 阅读 · 1 评论 -
java每日5问(第51天)
MySql 的存储引擎有哪些,区别是什么MySQL 常见的三种存储引擎为 InnoDB、MyISAM 和 MEMORY。1、事务安全:InnoDB 支持事务安全,MyISAM 和 MEMORY 两个不支持。2、存储限制:InnoDB 有 64TB 的存储限制,MyISAM 和 MEMORY 要是具体情况而定。3、空间使用:InnoDB 对空间使用程度较高,MyISAM 和 MEMORY 对空间使用程度较低。4、内存使用:InnoDB 和 MEMORY 对内存使用程度较高,MyISAM 对.原创 2020-08-08 14:46:06 · 113 阅读 · 0 评论 -
java每日5问(第50天)
TCP 的三次握手与四次挥手第一次握手:建立连接时,客户端发送 syn 包(syn=x)到服务器,并进入 SYN_SENT 状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=x+1),同时自己也发送一个 SYN 包(syn=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y原创 2020-08-07 18:44:17 · 94 阅读 · 0 评论 -
java每日5问(第49天)
http 协议的状态码有哪些?含义是什么?200 OK 客户端请求成功301Moved Permanently(永久移除),请求的 URL 已移走。Response 中应该包含一个 Location URL,说明资源现在所处的位置302found 重定向400Bad Request 客户端请求有语法错误,不能被服务器所理解401Unauthorized 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用403 Forbidden 服务器收到请求,但是拒绝提供服务原创 2020-08-06 22:20:23 · 116 阅读 · 0 评论 -
Java每日5问(第48天)
Spring Boot 中的监视器是什么?Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问生产环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即使一些外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组可直接作为 HTTP URL 访问的 REST 端点来检查状态。如何在 Spring Boot 中禁用 Actuator 端点安全性?默认情况下,所有敏感的 HTTP原创 2020-08-04 20:16:09 · 74 阅读 · 0 评论 -
java每日5问(第47天)
Zookeeper 有哪几种部署模式?部署模式:单机模式、伪集群模式、集群模式。Dubbo 内置了哪几种容器?Spring Container Jetty Container Log4j ContainerDubbo 里面有哪几种角色?Provider:暴露服务的服务提供方Consumer:调用远程服务的服务消费方Registry:服务注册与发现的注册中心Monitor:统计服务的调用次数和调用时间的监控中心Container:服务运行容器Dubbo 有哪几种集群容错方案,默认是那种?Fai原创 2020-08-03 19:01:27 · 77 阅读 · 0 评论 -
java每日5问(第46天)
Zookeeper 是什么?ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功 能稳定的系统提供给用户。Zookeeper 的应用场景?数据发布/订阅负载均衡命名服务分布式协调/通知集群管理Master 选举分布式锁 分布式队列四种类型的数据节点 Znode?PERSISTENT-持久节点除非手动删除,否则节点一直存在于 Zookeeper 上EPHEMERAL-临原创 2020-08-02 10:45:19 · 103 阅读 · 1 评论 -
java每日5问(第45天)
为什么要用 MQ?1、解耦:如果多个模块或者系统中,互相调用很复杂,维护起来比较麻烦,但是这个调用又不是同步调用,就可以运用 MQ 到这个业务中。2、异步:这个很好理解,比如用户的操作日志的维护,可以不用同步处理,节约响应时间。3、削峰:在高峰期的时候,系统每秒的请求量达到 5000,那么调用 MySQL 的请求也是5000,一般情况下 MySQL 的请求大概在 2000 左右,那么在高峰期的时候,数据库就被打垮了,那系统就不可用了。此时引入 MQ,在系统 A 前面加个 MQ,用户请求先到 MQ,原创 2020-08-01 17:08:52 · 100 阅读 · 0 评论 -
java每日5问(第44天)
Redis 和 Memcache 的区别?1、存储方式 Memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。 Redis 有部份存在硬盘上,redis 可以持久化其数据2、数据支持类型 memcached 所有的值均是简单的字符串,redis 作为其替代者,支持更为丰富的数据类型 ,提供 list,set,zset,hash 等数据结构的存储3、使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis 直接自己构建了 VM 机制 ,因为一般的原创 2020-07-31 08:24:00 · 81 阅读 · 0 评论 -
java每日5问(第43天)
Mybatis 中#{}和${}的区别是什么?#{}是预编译处理,KaTeX parse error: Expected 'EOF', got '#' at position 22: …替换。Mybatis 在处理#̲{}时,会将 sql 中的#{…{}时,就是把${}替换成变量的值。使用#{}可以有效的防止 SQL 注入,提高系统安全性。Spring 中@Autowire 与@Resource 的区别?@Autowire 默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为 null,可以原创 2020-07-30 11:34:17 · 83 阅读 · 0 评论 -
java每日5问(第42天)
自动装配有哪些方式?1、no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。2、byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML 文件中由相同名称定义的 bean。3、byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。4、构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数。5、autodetect - 首先容器尝试通过构造函数使用 autowire 装原创 2020-07-29 19:14:37 · 153 阅读 · 0 评论 -
java每日5问(第41天)
使用 Sping 框架的好处是什么?1、简化开发,解耦,集成其它框架。2、低侵入式设计,代码污染级别级别。3、Spring 的 DI 机制降低了业务对象替换的复杂性,提高了软件之间的解耦。4、Spring AOP 支持将一些通用的任务进行集中式的管理,例如:安全,事务,日志等,从而使代码能更好的复用。解释 Spring 支持的几种 bean 的作用域?当通过 Spring 容器创建一个 Bean 实例的时候,不仅可以完成 bean 实例的实力化,还可以为 bean 指定作用域。Spring be原创 2020-07-27 22:08:31 · 71 阅读 · 0 评论 -
Java每日5问(第40天)
解释一下代理模式?1、代理模式: 代理模式就是本该我做的事,我不做,我交给代理人去完成。就比如,我生产了一些产品,我自己不卖,我委托代理商帮我卖,让代理商和顾客打交道,我自己负责主要产品的生产就可以了。 代理模式的使用,需要有本类,和代理类,本类和代理类共同实现统一的接口。然后在 main 中调用就可以了。本类中的业务逻辑一般是不会变动的,在我们需要的时候可以不断的添加代理对象,或者修改代理类来实现业务的变更。2、代理模式可以分为: 静态代理 优点:可以做到在不修改目标对象功能的前提下,对目标功能扩展原创 2020-07-26 17:33:30 · 111 阅读 · 0 评论 -
java每日5问(第39天)
Spring 中 beanFactory 和 ApplicationContext 的联系和区别?BeanFactory 是 spring 中较为原始的 Factory,无法支持 spring 的许多插件,如 AOP 功能、Web 应用等。ApplicationContext 接口是通过 BeanFactory 接口派生而来的,除了具备 BeanFactory 接口的功能外,还具备资源访问、事件传播、国际化消息访问等功能。总体区别如下:1) 使用 ApplicationContext,配置 bea原创 2020-07-23 19:00:40 · 108 阅读 · 0 评论 -
java每日5问(第38天)
hibernate 和 mybatis 的区别?相同点:1)都属于 ORM 框架2)都是对 jdbc 的包装3)都属于持久层的框架不同点:1) hibernate 是面向对象的,mybatis 是面向 sql 的;2) hibernate 全自动的 orm,mybatis 是半自动的 orm;3) hibernate 查询映射实体对象必须全字段查询,mybatis 可以不用;4) hibernate 级联操作,mybatis 则没有;5) hibernate 编写 hql 查询数据库大大降低了原创 2020-07-22 23:15:48 · 117 阅读 · 0 评论 -
java每日5问(第37天)
说一下你熟悉的设计模式?单例模式:保证被创建一次,节省系统开销。 工厂模式(简单工厂、抽象工厂):解耦代码。观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的 依赖者都会收到通知并自动更新。外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接 口,让子系统更容易使用。模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可 以在不改变算法结构的情况下,重新定义算法的步骤。状态模式:允许对象在内部状态改变时原创 2020-07-21 22:15:37 · 98 阅读 · 0 评论 -
java每日5问(第36天)
如果提交任务时,线程池队列已满,这时会发生什么?许多程序员会认为该任务会阻塞直到线程池队列有空位。事实上如果一个任务不能被调度执 行那么 ThreadPoolExecutor’s submit()方法将会抛出一个 RejectedExecutionException 异常。什么是线程局部变量?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web 服务器)使用线程局原创 2020-07-21 00:01:36 · 119 阅读 · 0 评论 -
java每日5问(第35天)
什么是 FutureTask?在 Java 并发程序中 FutureTask 表示一个可以取消的异步运算。它有启动和取消运算、查询运算是否完成和取回运算结果等方法。只有当运算完 成的时候结果才能取回,如果运算尚未完成 get 方法将会阻塞。一个 FutureTask 对象可以对调用了 Callable 和 Runnable 的对象进行包 装,由于 FutureTask 也是调用了 Runnable 接口所以它可以提交给 Executor 来执行。Java 中 interrupted 和 isInterr原创 2020-07-19 15:56:18 · 92 阅读 · 0 评论 -
java每日5问(第34天)
线程阻塞有哪些原因?1、sleep() 允许 指定以毫秒为单位的一段时间作为参数,它使得线程在指定的时间内进入阻塞状态,不能得到 CPU 时间,指定的时间一过,线程重新进入可执行状态。典型地,sleep()被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试, 直到条件满足为止2、suspend() 和 resume() 两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态。典原创 2020-07-18 22:46:59 · 87 阅读 · 0 评论 -
Java每日5问(第34天)
产生死锁的条件?1、互斥条件:一个资源每次只能被一个进程使用。2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3、不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。请写出实现线程安全的几种方式?方式一:使用同步代码块方式二:使用同步方法方式三:使用ReentrantLock守护线程是什么?它和非守护线程的区别?程序运行完毕,jvm 会等待非守护线程完成后关闭,但是 jvm 不会等待守护线程.原创 2020-07-17 22:51:18 · 138 阅读 · 0 评论 -
Java每日5问(第33天)
Java 中 notify 和 notifyAll 有什么区别?notify()方法不能唤醒某个具体的线程,所以只有一个线程在等 待的时候它才有用武之地。而 notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行。什么是乐观锁和悲观锁?1) 乐观锁:就像它的名字一样,对于并发间操作产生的线程安全问题持乐观状态,乐观锁认为竞争不总是会发生,因此它不需要持有锁,将比较-替换这两个动作作为一个原子操作尝试去修改内存中的变量,如果失败则表示发生冲突,那么就应该有相应的重试逻辑。2)原创 2020-07-15 22:13:40 · 91 阅读 · 0 评论 -
Java每日5问(第32天)
Java 中什么是静态条件?竞态条件会导致程序在并发情况下出现一些 bugs。多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了, 那么整个程序就会出现一些不确定的 bugs。这种 bugs 很难发现而且会重复出现,因为线程间的随机竞争。Java 中如何停止一个线程?Java 提供了很丰富的 API 但没有为停止线程提供 API。JDK 1.0 本来有一些像 stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的 JD原创 2020-07-14 18:17:12 · 111 阅读 · 0 评论 -
Java每日5问(第31天)
线程同步的方法?wait():使一个线程处于等待状态,并且释放所持有的对象的 lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException 异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒 某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。notityAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是 让它们竞争。进原创 2020-07-13 18:36:58 · 131 阅读 · 0 评论 -
Java每日5问(第30天)
1. Java 创建线程之后,直接调用 start()方法和 run()的区别?启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由 JVM 调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。2. 线程 B 怎么知道线程 A 修改了变量?volatile 修饰变量synchronized 修饰修改变量的方法wait/notify while 轮询3. synchronized 和 Volatile、CAS 比原创 2020-07-12 22:22:06 · 108 阅读 · 0 评论 -
Java每日5问(第29天)
类加载器有哪些?启动类加载器:Bootstrap ClassLoader,负责加载存放在 JDK\jre\lib(JDK 代表 JDK 的安装目录, 下同)下,或被-Xbootclasspath 参数指定的路径中的,并且能被虚拟机识别的类库扩展类加载器:Extension ClassLoader,该加载器由 sun.misc.LauncherKaTeX parse error: Undefined control sequence: \jre at position 28: …er 实现, 它负责加载原创 2020-07-09 22:42:38 · 82 阅读 · 0 评论 -
Java每日5问(第28天)
JDBC 的 ResultSet 是什么?在查询数据库后会返回一个 ResultSet,它就像是查询结果集的一张数据表。ResultSet 对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行。如果调用了 ResultSet 的 next()方法游标会下移一行,如果没有更多的数据了,next()方法会返回 false。可以在 for 循环中用它来遍历数据集。默认的 ResultSet 是不能更新的,游标也只能往下移。也就是说你只能从第一行到最后一行遍历一遍。不过也可以创建可以回滚或者原创 2020-07-08 14:28:10 · 130 阅读 · 0 评论 -
Java每日5问(第27天)
tomcat 容器是如何创建 servlet 类实例?用到了什么原理?当容器启动时,会读取在 webapps 目录下所有的 web 应用中的 web.xml 文件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载, 并通过反射的方式实例化。(有时候也是在第一次请求时实例化)在 servlet 注册时加上1如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。JDBC 访问数据库的基本步骤是什么?第一步:Class.原创 2020-07-06 20:15:04 · 61 阅读 · 0 评论 -
Java每日5问(第26天)
如何判断一个对象应该被回收?在 Java 中采取了 可达性分析法通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成 为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果 在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对 象了。虚拟机栈中引用的对象、方法区类静态属性引用的对象、方法区常量池引用的对象、本地原创 2020-07-04 08:45:22 · 79 阅读 · 0 评论 -
Java每日5问(第25天)
Filter 链是什么?在一个 web 应用中,可以开发编写多个 Filter,这些 Filter 组合起来称之为一个 Filter 链。web 服务器根据 Filter 在 web.xml 文件中的注册顺序,决定先调用哪个 Filter,当第一个 Filter 的 doFilter 方法被调用时,web 服务器会创建一个代表 Filter 链的 FilterChain 对象传递给该方法。在 doFilter方法中,开发人员如果调用了FilterChain 对象的doFilter 方法,则web 服务原创 2020-07-02 18:47:33 · 131 阅读 · 0 评论 -
Java每日5问(第24天)
响应乱码?1、原因: 由服务器编码,默认使用 ISO-8859-1 进行编码由浏览器解码,默认使用 GBK 进行解码2、解决方案方法 1:设置响应头response.setHeader(“Content-Type”,“text/html;charset=utf-8”);方法 2:设置响应的内容类型response.setContentType(“text/html;charset=utf-8”);通过这种方式可以在响应头中告诉浏览器响应体的编码方式是 UTF-8;同时服务器也会采用该字符集进行原创 2020-07-01 20:16:15 · 71 阅读 · 0 评论 -
Java每日5问(第23天)
说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别?Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行Servlet 的初始化,请求到达时运行其 service 方法,service 方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其 destroy 方法。与 cgi 的区别在于 servlet 处于服务器进程中,它通过多线程方式运行其 service原创 2020-06-30 19:18:47 · 89 阅读 · 0 评论 -
Java每日5问(第22天)
JSP 常用的指令?page:针对当前页面的指令。include:包含另一个页面taglib:定义和访问自定义标签页面间对象传递的方法?request、session、application、cookieJSP 中动态 INCLUDE 与静态 INCLUDE 的区别?动态 include 用于 jsp:include 动作实现<jsp:include page = “include.jsp” flush = “true”/>它总是会检查所含文件的变化,适用于包含动态页面,并且可以带参数原创 2020-06-29 10:34:31 · 80 阅读 · 0 评论 -
Java每日5问(第21天)
execute,executeQuery,executeUpdate 的区别是什么?1、Statement 的 execute(String query)方法用来执行任意的 SQL 查询,如果查询的结果是一个ResultSet,这个方法就返回 true。如果结果不是 ResultSet,比如 insert 或者 update 查询,它就会返回 false 。 我们可以通过它的 getResultSet 方法来获取 ResultSet , 或者通过getUpdateCount()方法来获取更新的记录条数。原创 2020-06-28 21:10:02 · 81 阅读 · 0 评论 -
Java每日5问(第20天)
Http 请求的 get 和 post 方法的区别。1、Get 是向服务器发索取数据的一种请求,而 Post 是向服务器提交数据的一种请求2、Get 是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改3、Get 请求的参数会跟在 url 后进行传递,请求的数据会附在 URL 之后,以?分割 URL 和传输数据,参数之间以&相连,%XX 中的 XX 为该符号以 16 进制表示的 ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字原创 2020-06-27 15:22:16 · 81 阅读 · 0 评论 -
Java每日5问(第19天)
转发(forward)和重定向(redirect)的区别?从地址栏显示来说forward 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来, 然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect 是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的 URL.从数据共享来说forward:转发页面和转发到的页面可以共享 request 里面的数据. redirect原创 2020-06-26 22:06:20 · 65 阅读 · 0 评论 -
Java每日5问(第18天)
session 和 cookie 的区别?session 是存储在服务器端,cookie 是存储在客户端的,所以安全来讲 session 的安全性要比cookie 高,然后我们获取 session 里的信息是通过存放在会话 cookie 里的 sessionid 获取的。又由于 session 是存放在服务器的内存中,所以 session 里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在 session 中,而把一些次要东西存储在客户端的 cookie 里, 然后 cookie 确切的说分为原创 2020-06-25 21:04:49 · 98 阅读 · 0 评论