笔记们2自学2学习2itstime①Filter是基于函数回调而Interceptor则_第1页
笔记们2自学2学习2itstime①Filter是基于函数回调而Interceptor则_第2页
笔记们2自学2学习2itstime①Filter是基于函数回调而Interceptor则_第3页
笔记们2自学2学习2itstime①Filter是基于函数回调而Interceptor则_第4页
笔记们2自学2学习2itstime①Filter是基于函数回调而Interceptor则_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

参考 ①:FilterInterceptorJava②:FilterServletInterceptorServlet③:FilterInterceptoraction参考 参考 ①:GMT:GreenwichMeanTime标准时间。这是以英国天文台观测结果得出的时间,这是英国②:UT:UniversalTime③:UTC:CoordinatedUniversalTime协调世界时。因为地球自转越来越慢,每年都会比前一年多出零点几秒,每隔几年协调世界时组织都会给世界时+1秒,让基于原子钟的世界时和基于天文学(人类感知)的标准时间相差不UTC,这是现在使用的世界标准时间。协调世界时不与任何地区位置相关,也不代表0时区上。GMT=UTC+0作者: utf-8GBK编码格式,那么此时显示的肯定是乱码了。GBKutf-8GBKutf-8打开,那只能怪你自己了。参考 ①:==equals对类型来说:==比较的是内存地址。equals方法默认也是比较内存地址,可以根据自己的规则去覆写equals。Stringequals。HashMapHashTable。equals方法来逐个进行比较,这个方法确实可行。但是如果集合中已经存在一万条数据或者的数据,如果采用equals方法去逐一比较,效率必然是一个问题。hashCode()计算出对象实例的哈希码,在对象进行散列时作为key存入。之所以有hashCode方法,因为在批量的对象比较中,hashCodeequalshashCode方法,一下子能定位到它应该旋转的物理位置,若该位置没有元素,可直接;若该位置有元素,就调用它的equals方法与新元素进行比较,若相同则不存,不相同,就放到该位置的链表末端。当这个类的对象需要向各种hash集合中的时候,得写,写后效率提升会很高equals(Objectobj)hashCode()equals(Objectobj)truehashCode()hashCode()相等,equals()不一定相等。对象的多态:向上,向下参考 1、java参考:参考2(使用场景):https://z JavaJavaJava的反射机制。第法:通过对象名.getClass()这种方式使用的比较少第二种方式:通过类名.class来获取第三种方式Class.forName(“完整的包名+类名”)这种方式比较常用SpringXMLBean1new的方式去创建对象,但最起码的你要把类的全限定名告诉人家吧,这样才知道你需要反2MethodMethod3:3反射方法:肯定需要类的全限定名,反射哪个方法,方法的传参结构。最终生成了一个不包含任何内容Method,即Method1:简单说明动态即不直接去调用一个对象,而是通过(对象)调用这个对象,对象也可以决定是不是真的需要去调用这个对象2:有哪些动态①:JDK动态(被的类需要有接口②:CGLIB动态(被的类无需有接口3:spring是如何使用动态4责任链模式就是多个上述所说的器(动态对象)同一个对象被观察对象中商品,例如某某仓库。当仓库中新增了一件商品后,被观察者会告诉它的观察者们,淘宝,京东等,又新增商品了,可以销售了参考 工厂模式:new创建一个产品类,为了简化操作我们可以创建一个工厂类,由这个工厂类负责创建所需-->轿车类-->又细分了,、汽车厂-->大巴车类-->又细分了,车、长途客车-->-->总结:普通工厂解决的是一类汽车的问题,例如轿车类,即您只需要向工厂描述需要什么类型的轿车,比如轿车或轿车,就可以获得指定的轿车。如果想生产多种类汽车,那么普通工厂的内部逻辑将变得复杂起来。参考参考 参考3(模式和装饰模式结构型模式(7种):适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式、模解释器模式(interpreter模式)、状态模式、策略模式、责任链模式。new一句话:在不修改目标类的情况下,通过对象对目标功能进行扩展类似于发布订阅模式,一个对象可以给它的多个对象发布通知参考:JRE:javaJDK:java开发工具包,jdkjavajreJVMjrejre的一部分,是一个虚构出来的计算机。Jvmjvmjava编译器和操作系统之间的虚拟处理器,可执行字节码程序。Javajvmjvm将每条指令翻局部变量表(LocalVariables),基本类型直接在栈帧中,类型则指向堆内存。Java中的堆是用来对象本身的以及数组(对象和数组是存放在Java栈中的)。堆是被所有线程共享的,在JVM 与堆一样,是被线程共享的区域。在方法区中,了每个类的信息(包括类的名称、方法信息、字段信息)、JVMCPUCPU的内核只会执行一条线程中的指令。因此,为了能够使得每个线程都程切换后能够恢复在切换之前的程参考:JVM在整个流程中所处的位置。JVM内存模型。JVM①:程序计数器(PC寄存器只会执行一条线程中的指令。因此,为了能够使得每个线程 程切换后能够恢复在切换之前的程序执行位置,注:并且不能互相扰,因此,可以这么说,程序计数器是每个线程所私有的。由于程序计数器中的数据所占Java①:局部变量表(LocalVariables),基本类型直接在栈帧中,类型则指向堆内存②:操作数栈(Operand行本地方法(NativeMethod)服务的。Java中的堆是用来对象本身的以及数组(数组是存放在Java栈中的)。堆是被所有线程共享的,在JVM中只与堆一样,是被线程共享的区域。在方法区中,了每个类的信息(包括类的名称、方法信息、字段信息)、静态量和符 。在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示Stringintern方法。5、JVM虚拟机自动回收机6、jvm①:jvmjavajava程序时,jvm实例就产生了,mainjvm7、JVM参数配置(JVM调优的基础参考:JVM目前总体看来:JVMJVM参数配置的基础,JVMJVM的调优。参考1-JVM内存模型详解:/article/details/参考2-JVM回收详解 注:这个其实就把内存模型->回收原理->参数配置整个流程中主要的内容说明白了参考3-参考2的拓展:②:能够使GC(回收器)更加高效的运行- m、-Xmx(MaxHeapSize)-XX:PermSize200m1024m-XX:MaxPermSize-XX:NewSize(-Xns)年轻代内存初始大小-XX:MaxNewSize(-Xmn)- EdenSurvivor8- 看完如下内容后,我们应该知道如何选择合适自己服务器的回收方式了参考:参数:、JVM状态,用于程序员JVM调优及故障排查gcgcgclogdump快照回收器:具体使用哪个回收器回收实现算法包含:标记-清除。。标记整理。:串行收集器:并行收集器多条收集线程并行工作,在多核CPU下效率更高,应用线程仍然处于等待状态:CMS收集器(ConcurrentMarkCMS收集器是缩短暂停应用时间为目标而设计的,是基于标记-4:G1CMSGC参 描- - - - - CMS收集器(并发收集器 - FullGC后开始压缩和整理,0FullGC- 80%CMSFull- G1- GC后还存活,就进入老年代,0Java8参考 参考2:1、函数式接口、lambda表达式、方法,之间的关注:也可以用@FunctionalInterface进行注解表示这是一个函数式接口,也告诉了别人不要乱往这里添加其它抽象②:lambdalambda依赖于函数式接口。一句话:lambda③:方法方法是指,在lambda表达式中,可以类或对象中的方法,用来实现函数式接口中的抽象方法函数式接口、lambda表达式、方法、默认方法、加强了对日期的处理、optional、stream、允许在jvm上运行js参考(讲的太好了streamlist.stream过滤、排序、到新的集合等。总体来说,更加简单直观的看到了对list进行了什么操作。if流,的本质,集合+LambdaJava集合的功能强化。Java8Stream是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregateoperation)(bulkdataoperation)。StreamAPILambda表同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势fork/join并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错,StreamAPI无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java8java.util.stream是一个函数式语言+多核时代综合参考(讲的很好LambdaLambda表达式。函数式接口是指只了一个抽象方法的接口,可以有多个静态方法、默认方法,如下所示:publicinterfaceCalculation{intcalculate(inta,intb);}@FunctionalInterface注解表示被标注的接口将被设计成一个函数式接口,不是必须的,它主要是在接口违背函数式接口原则时会出现编译错误。比如修改Calculation接口,再添加一个抽象方法就会出现Multiplenon-overridingmethodsfoundininterfacecom.cf.demo.lambda.Calculation//编译错误:Multiplenon-overriding methodsfoundininterfacecom.cf.demo.lambda.CalculationpublicinterfaceCalculation{intcalculate(inta,intb);intcalculate2(inta,int}注意:Object类的方法是特例,即使接口了多个Object类的方法,也不会被算入“只了一个抽象方法”的计数Calculation接口是正确的函数式接口:publicinterfaceCalculation{intcalculate(inta,intb);booleanequals(Object}口,如需要在Lambda表达式中抛异常时,这种情况就需要自定义一个函数式接口,并异常。publicinterfaceFunctionalDefaultMethods{voidmethod();defaultvoiddefaultMethod()System.out.println(“o,isdefault}}2、LambdaLambda表达式由参数列表、箭头(Lambda操作符)、Lambda主体三个部分组成。Lambda表达式的参数列表要和函数式接口的参数列表相对应,LambdadoArithmetic方法,Calculation来完成不同的计算:publicstaticintdoArithmetic(inta,intb,Calculationcalculation){returncalculation.calculate(a,b);}intresult=doArithmetic(3,2,newCalculation(){publicintcalculate(inta,intb){returna*b;}Lambdaintresult=doArithmetic(3,2,(inta,intb)->a*括号。参数类型可以省略,因为Java编译器能通过上下文推断出数据类型,无需显示的:intresult=doArithmetic(3,2,(a,b)->a*b);Lambda主体只有一个语句时,可以省略{}return,(inta,intb)->a*b)就是省略之后的写法,我们也可以使用完整的intresult=doArithmetic(3,2,(a,b)->{returna*b;当需要在Lambda表达式中使用‘外部局部变量’时,这个‘外部局部变量’默认是final的,‘外部局部变量’这里是指非LambdadoArithmetic方法,添加一个‘外部局部变量’,为乘积赋个初始值,以下代intinitialValue=intresult=doArithmetic(3,2,(a,b)->a*b+initialValue=2;//Variableusedinlambdaexpressionshouldbefinaloreffectivelyfinal符::前,方法的名称放在后面,目标可以是类名也可以是对象名。通过以下三个例子来介绍方法的三种使用方Arithmetic类,Arithmetic类包含一个静态方法和一个实例方法:publicclassArithmeticpublicstaticintmultiply(inta,intb){returna*b;}publicintadd(inta,intb){returna+b;}}指向静态方法的方法intmultiplyResult=doArithmetic(3,2,Arithmetic::multiply);指向现有对象的实例方法的方法Arithmeticarithmetic=newintaddResult=doArithmetic(3,2,arithmetic::add);指向任意类型实例方法的方法,这种情况有个特点,就是在一个对象的方法,而这个对象本身是Lambda的calculateInteger:publicinterfaceCalculationintcalculate(Integera,Integer}abintresult=doArithmetic(3,2, pareTo等于 对于一个现有构造函数,可以使用它的名称和new来创建一个它的:ClassName::new。再使用构造函数时,String对象的publicstaticStringgenerateString(r<String>r){returnr.get();}publicstaticStringgenerateString(Stringvalue,Function<String,String>function){returnfunction.apply(value);}分别使用构造函数StringresultgenerateString(String::new);//String()构造方法result=generateString(" oLambda",String::new);//String(Stringoriginal)构造方法参考 参考 参考 ①:java自带注解:例如@Override②:元注解(元老注解-自命名):②:@Retention(标明注解被保留的阶段或表示什么时候到这个注解 ed(javadoc文档①:可见注解的方式为:public@interface①:@Target4②:@Retention表示什么时候到这个自定义注解:Class代表编译后注解,SOURCE代表源文件注解RUNTIME代表运行时到注解参考:参考 torHashMapJDK1.8JDK1.7VSJDK1.8什么是说道树先讲什么是二叉树 集合就是一个放数据的容器,准确的说是放数据对象的容器集合类存放的都是对象的,而不是对象的本身3种:set(集)、list(列表)map(映射)①:集合用于对象的容器,对象是用来封装数据,对象多了也需要集中式管理②:数组可以基本数据类型,也可以数据类型;集合只能数据类型③:数组的元素必须是同一个数据类型;集合的对象可以是不同数据类型通过使用JDK自带的集合类,可以降低代码和学习新API成本MapCollectionCollection接口的子接口包括:SetListList接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector8、树是一种特殊的二叉查找树。树的每个结点上都有位表示结点的颜色,可以是红(Red)或黑(Black)节点)也是黑色[注意:这里叶子结点,是指为空(NILNULL)的叶子结点!]。每个结点到叶子结点NIL所经过的黑色结点的个数一样的。[确保没有一条路径会比其他路径长出俩倍,所以树是树的基本操作是添加、删除。在对树进行添加或删除之后,都会用到旋转方法。为什么呢?道理很简单,添加或删除树中的结点之后,树的结构就发生了变化,可能不满足上面三条性质,也就不再是一颗树了,而是一颗普通的树。而通过旋转和变色,可以使这颗树重新成为树。简单点说,旋转和变色的目的是让树保持红 参考:参考2(自定义编译时异常和运行时异常):参考3:注:javathrowthrows关键字,后面讲。Error是“错误”,Exception是“异常”Error子类中,不仅仅包括上图中的两个,但这个不是我们学习的重点,没必要了解太多。Exception子类中,有RuntimeException,RuntimeExceptionRuntimeException的以外thrownew自定义对象抛出。调用方法时会产生提示出错thrownew自定义对象抛出!throws抛出异常UML参考 参考(java线程状态及转换)(非常好 参考2:参考 ⑤:状JavaEE规范(13个参考 参考参考(13规范中EJB的理解 ①:EJBjavaJ2EESpringIOCIOC答:控制反转是一种通过描述(这种描述在java中可以是xml或注解),通过第去产生或获取特定对象的方式答:IOC(控制反转)是一种设计思想,springioc容器控制各种资源对象的创建和管理,然后应用程序可直接new去创建,实现了依赖解耦。SpringIOC1、SpringIOC①:SpringIoCBeanFactoryApplicationContext两个接口,ApplicationContextBeanFactoryBeanFactoryApplicationContextSpringIoC②:ApplicationContext的实现类有ClassPathXmlApplicationContext,我们可以使用这个对象我们写的xml配置去初SpringIoC容器中获取我们想要的对象了。2、SpringIoC3、SpringBeanSpringIoCBeanBean而言,在容器中存在其生命周期,它的初始化和销毁也需要一SpringBean生命周期的知识了。BeanBeanSpringIOCSpringIOCBean而服务的,需要SpringBeanIOCIOC注:通俗易懂:注入指的是将属性注入到类中(iocBean装入到某个类中去使用23②:setter注:这三种注入方式,可以通过,xml1②:在@Configuration③:在@Component2、注入(自动注入)byType注:按照名称(byName)Autowired例如:一个接口有多个实现,那么就需要@Qualifier和@Autowired注:@Resource可以先按名称(byName)再按类型(byType)自动进行装注入,如果指定了名称,只能按J2EE规范,@Autowired和@Qualifierspring规范。参考:参考 31、@Profile①:@ProfileDataSourceBeanBean②:让@ProfileProfileProfile就都不会注入。怎么在启动服务时指定呢?5、spring中如何加载.propertiesspring中如何加载.properties文件?通过@PropertySource注解1:pojo中:5、springelSpringelSpringAOP1、SpringAOP答:动态,动态又分JDK动态(类需要有接口)、CGLIB动态(类不需要实现接口)Spring会根据类是否实现来接口,来选择JDK或CGLIB动态2、SpringAOP1、SpringAOP①:SpringAOPAOP框架,用@Aspect注解一个类,这个类即变为一个切面类,切面类中包含各个通知方法(例如前置、后置、返回、异常、环绕通知),通知方法上通过正则表达式指定哪些类的哪些方法,被的这些方法就是切点。然后启动功能,并将切面注入到容器中,切面就会起作用了,所以对被的类是没有侵②:SpringAOP不仅可以方法,也可以在现有的类中添加自定义的类和方法③:SpringAOP生成对象的过程称为织入切面、通知(前置、后置、返回、异常、环绕通知)切面就是在一个怎样的环境工作,被切面 器 的一个方法就是切点,切点又分前置、后置、返回SpringAOP在现有的类中添加自定义的类和方法。2、SpringAOP注:SpringAOPAOP3AspectJSpring①:创建切面,切面中的各个方法上的正则表达式,用于指定哪些类中的哪些方法②:启用器(注解@EnableAspectJAuto),并注入器到Bean中使其生效③:如果有多个切面,可通过@OrderAOPSpringJDBC①:加载数据库驱动(或驱动程序配置数据源有几种方法?(自己总结①:第数据库连接池(如DBCP)。如果使用了spring,可以使用spring提供的内部类Web服务器(容器?)JNDI使用JdbcTempldate前,需要将数据源(即DataSource接口的实现类)注入到JdbcTemte中,然后就可以使用了。注入的数据源不限于,spring实现的简单数据源SimpleDriverDataSourceDBPC数据库连接池实现的数据源xmljavaconfig初始化JDBCTemte时需要指定数据源,可见类中装配了两个数据源,最终使用的是DBCP的数据源Spring参考:Spring注:事务管理器的跟结构为:tformTransactionManagerSpringMyBatis,使用的事务管理器是③:有了事务管理器,并且打开了事务功能。还需要配置事务定义器,事务定义器又可通过@Transactional配置进行配置,事务定义器中可设置事务级别,事务超时时间等。然后事务就正常工作了。注:xml配置方式不常用。xml配置方式需要配置一个事务器和哪些类。为啥还需要配置哪些类?因为@Transactional直接注释到指定类或方法了。注(总结原有基础包含:数据源配置,jdbcTemte注入数据源。增加“数据源事务管理器”,事务就交由事务管理器进行管理了,不再由jdbcTemte进行管理ACID原子性、一致性、性、永久性性:多个事务之间是相互的,不能存在相互影响。据也不会。2、简单说下事务的级①:说事务级别前,需要理解下面几个概念:幻不脏①:幻读(幻想读):事务T1一条指定where条件的语句,返回结果集。此务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新就是幻想读。②:不可重复:事务T1一行记录,紧接着事务T2修改了T1刚刚的记录,然后T1再次查询,发现与第③:脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所的行就无效,也就是脏数据。注②:然后再说级别(未提一件事,你就给我重新叙述一遍,让你再敢隐瞒在网上学的级别,如下(下图中作者提到的dirtyread相当于下面的 MITTED(未提交、未提交读(存在问题:脏读))幻想读、不可重复读和脏读都允许②:READCOMMITTED(已提交、提交读(存在问题:不可重复度))允许幻想读、不可重复读,不允许脏④:SERIALIZABLE(事务串行化执行、串行化、序列化(不存在任何问题))3、简单说下Spring中的事务行(面试)spring有几种行为?都是什么,比较常用的是那些(面试)spring事务控制中的级别REQUIERS_NEW、NESTED有什么区别REQUIES_NEWNESTEDNESTED就会使用创建新事务的方法。te的事务管理器的根接口均为:tformTransactionManager3个方法,如下:①:获取事务状态(212、代买13-5使用的是默认事务定义类1、式事务,通过xml配置或注解方式来实现事务控制,不需要开发者自己写代xml12xmljava②:式事务:通过xml配置,或java配DefaultTransactionDefinition(默认事物定义类)Spring1、SpringMVCSpring参考:Web服务上,Spring5SpringWebFluxWeb服务开发框架,它与传统的WebMVC相比具体有哪些优势呢?今天我们就针对这个话题展开讨论。WebFlux的应用提供了一个很好的场景。我们知道在一个微服务系统中,存在数十乃至数百I/OI/O操跨服务之间的网络请求。针对这种场景,WebFlux是一种非常有效的解决方案。注:上面说的非常对,例如微服务的一个链路可能调用了很多服务,结果调用到某个服务(SpringMVC服务)的时候,正好这个服务线程数满了,结果可想而知,SpringMVC直接丢弃了这个请求,这样是不好的。SpringWebMVC在实现上并不允许在整个请求生命周期中都采用非阻塞式的操作方式。因此,Spring在尽量沿用原有的开发模式以及API设计上提供了支持异步非阻塞的SpringWebFlux框架。在使用WebFlux和WebMvc实际的使用并没有太大的区别,实际上WebFlux的组件基本都是SpringMvc组件Spring1、SpringBoot参考:SpringSpring1SpringMVCinput-name保持一致,springmvcinput-name,springmvc④:用@PathVariableget⑤:@RequestBodyjsonspringmvc3Model--ModelAndView--RedirectAttribute--4、springmvc如何在request、session获取、对象=②:注解@SessionAttribute(requiredtrue)和注解 =注:思考:springmvc如何 呢?即不通过原始方式request存。5、参考:①:preHandle()方法:在请求处理之前进行调用(HandlerController方法调用之前②:postHandle()方法:在请求处理后,视图被渲染之前执行(HandlerController方法调用之后 pletion()DispatcherServlet渲染了对应的视图之后执行注:如果只想实现3个方法中的1、2个的时候,使用HandlerInterceptorAdapter即可参考:①:WebMvcConfigurerAdapter注解(spring5后就不建议使用了,以后会弃用②:WebMvcConfigurerWebMvcConfigurationSupport①:FilterInterceptorJava②:FilterServletInterceptorServlet③:FilterInterceptoraction②:业务校验。例如商品数量最大件数参考:html、pdf、excel、json等,都需要通过其对应的视图解析器去解析出来。①:逻辑视图渲染:数据模型-->视图解析器-->②:非逻辑视图渲染:数据模型-->json,pdfjsp就需要视图解析jspjsp,需要通过视图解析器去定位。SpringMVCSpringMVCSpring参考 OSI2、TCP/IPUDP3、TCPUDP4、TCP参考 注:读东西一定要认真仔细的读,不要心浮气躁,这样才能真真的理解并。-1、httpwww参考 HypertanerPlWWW服务器传输超文本到本地浏览器的传送协议,它可以使浏览器更加高效,使网络传输减少;它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等,这就是为什么在浏览器中看到的网页地址都是以“tp:开头的原因。WWW是信息网的缩写,英文全称为“WorldWideWeb”,中文名字为“网”,””等,常简称为Web。分为Web客户端和Web服务器程序,WWW可以让Web客户端(常用浏览器)浏览Web服务器上的页面,是一个由许多互相的超文本组成的系统,通过互联网。WWWHTTPwwwhttp和打开 /看到的网页内容是一样的就OK了HTTP②:HTTP①:get②:headget,只不过服务器响应中没有内容,仅用于获取报头(响应头)③:trace③:optionsURLHTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET,POST”。options参考:客户机通过这个头告诉服务器,请求完后是关闭还是保持客户机通过这个头告诉服务器,想的主机名用来说明请求从哪里发起的,包括且仅仅包括协议和CORSresponseheader:Access-Control-Allow-Origin。客户机通过这个头告诉服务器,它是从哪个资源来服务器的。(一般用于防盗链服务器通过这个头,响应完是保持还是关闭HTTPTransfer_EncodinghttpHTTPhttpContent-LengthVary字段用于列出一个响应字段列表,告诉缓存服务器遇到同一个URL对应着不同版本文档的情况时,如何缓存和302服务器通过这个头,告诉浏览器以的方式打开数据服务器通过这个头,告诉浏览器把回送的数据缓存多长时间。-10Cache-Control6、MIME①:MIME(MultipurposeInternetMailExtensions)是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和MIME消息能包含文本、图像、音频、以及其他应用程序的数据浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理URL,因此Web服务器在响应头中添加正确的MIME类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,将无法正常工作,并且的文件也MIME注:MIME/分隔而组成,不允许有空格。type表示可以被分多个子类的独立类别,subtype表示细分后的每个类型。MIMEMIME①:text/in表示文本文件的默认值②:application/octet-streamMIME.html、普通文本.txt:text/RTF.rtfapplication/rtfGIF图形.gif:image/gifJPEG.jpeg、.jpgimage/jpegau声音文件.au:audio/basicMIDI音乐文件mid、.midi:audio/midi、audio/x-midiRealAudio音乐文件.ra、.ram:audio/x-pn-realaudioMPEG文件.mpg、.mpeg: AVI文件 GZIP.gzapplication/x-gzipTAR文件.tar:application/x-tar注:一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码这个文件,这就是经常看到一些PHP网页点击的结果却是一个文件或一张的原因。<formencType=””>中默认的encType,form表单数据被编码为key/value格 html②:传输xml、纯文本、json格式的:text/xml、text/in、④:传输各种格式:image/gif、image/jpeg、pdf、word文档:application/pdf、⑦:传输音频(mp3)、(mp4、 /mpeg4、①:http长JavaMQ就是消息队列。是软件和软件进行通信的中间件产品,作用如下:①:异步处理-②:应用解耦-③:削峰填谷-④:日志处理--消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。100%不丢消息,因为在安全方面做的多,性能可能稍微差一些。②:ActiveMQ:为万级(性能)。优点:支持语言较多。缺点:较老的技术,速度慢 MQ:为十万级(性能最好)Rabbitmq100%mqActivemqRabbitMQ③:server服务(rabbitMQbroker):ServerVirtualHost(vhost),4、简单介绍下,mqserverRabbitMQ①:消息(message):消息在队列中④:队列(queue):用于消息RabbitMQ①:简单模式(一对一②:工作模式(一对一③:发布订阅模式(一对多④:路由模式(一对多⑤:通配符模式(路由通配符模式、模式)(一对多①:数据被的频率远大于写的次数RedisRedis①:Redis②:Redis6③:Redis这是RestTemte类默认的序列化方式。的类需要实现Serializable接口是StringRedisTemte默认的序列化方式,key和value都会采用此方式进行序列化Serializable与Jackson2JsonRedisSerializer大致相同,会额外序列化对象的包命和类一句话:RedisTemte可以操作对象、字符串,并且可以设置序列化方式。StringRedisTemte只能操作字符串StringRedisTemte默认使用的序列化方式是StringRedisSerializer。RedisTemte可以设置各个类型的key、value的序列化方式,例如设置String和hash类型的key、value,都为6、Redis命令被加入到执行队列中),在执行命令的过程中,作的数据不会被其他进程影响(因为其他进程想要操作相同exec命令。精简:redis可以将多个语句放到一个事务中执行,在执行命令的过程中,数据不会被其他线程所影响。事务确认提交前,也可某些值是否变化,如果发生了变化,则回滚事务。①:mulit②:watch:某些键。当被的键在事务执行前被修改,则事务会被回滚③:unwatch:取消某些键②:pipelineRedismq答:不会,RedisKey2、RedisKey有几种方式?(面试②:惰性回收是指当一个超时的键,被再次get命令时,将触发Redis将其从内存中清空10、Redislua①:RDB(快照备份Redis缓存。RDB①:saveRedis主线程备份,因此备份时,Redis②:bgsaveRedisRedis6种策略中的一种进行淘汰键值。注:Redisnoeviction方式(重要)。volatile-random方式。14、Redis主从:即多台redis集群,一台redis作为写服务器,其他作为读服务器。主从同步过程:基于主从配置,哨兵是在主从配置基础上,主服务器,如果主服务器挂掉,哨兵自动切换从服务器为主服务器。3、Codis参考:Codis①:由第开发,codis是客户端和redis之间的中间件,codis的多个redis实例构成一个集群,codis根据key向不同的redis服务器或数据。codiscodisrediscodisZookeeperETCDredis自家产品,去中心化,不需要zookeeper或ETCD去cluster和redis实例之间的关系配置Codis集群需要配置中心,cluster不需要(去中心化)Codispipeline,clusterCodis1024个,cluster16384codisCodis后续升级无法保障,cluster15、SpringRedis①:配置缓存管理器作用:将redis分区,使用注解的时候,需要指定将缓存到哪个区中参考:参考2:h 1、MongoDBMongoDB更类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能Redis是一个开源(BSD)的,内存中的数据结构系统,支持多种类型的数据结构,可用作数据库,高速缓存2、MongoDBRedis1RedisLRUMongoDBlinuxmmap2Redishash、set、listMongoDB3当物理内存不够用的时候,redismongodbredis但是,mongodb不一样,只要,业务上能保证,冷热数据的读写比,使得热数据在物理内存中,mmapmongodb4mongodb依赖内存,TPS较高;Redis依赖内存,TPSRedisMongoDB5mongodb1.8binlog方式(MySQL同样采用该方式)Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响性能MongoDBRedis6mongodb内置数据分析功能(mapreduce);Redis7Redis事务支持比较弱,只能保证事务中的每个操作连续执行;mongodb8MongoDB集群技术比较成熟,Redis3.01、不sql,意味着可以更精确定位sql语句(如果没有sql,还真可能不好定位sql问题),可以对sql进行优化和3MapperXMLSQLSessionFactory③:SQLSessionFactorySqlSessionSqlSession二、Mybatis1、Mybatis先说明下,Mybatisxmlmybatis给系统设置一些运行参数,包含数据库的用户名、等javajdbc可以给mybatis一些插件mapper-xmlmapper-xml③:用类引入映射注:selectRowBounds3、update5、sql抽出公共部分,用于各个sqltrimwhere1=1参考文档:数据库应试知识扩充createcheck(xxxin())primarykeyforeignkey(xxx)referencesxxx_table(xxx)notnullalteradd、modify、drop、renamecolumnxxxtocreatecreateviewxxxcreateorrecetrigger触发器名createorreceprocedure过程名droptabletruncatetable参考:参考参考:参考(k8s):参考Dockerdocker是一个开源的应用容器引擎,让开发者将应用及应用依赖打包为镜像,进行容器化运行(容器是由镜像实例化而来)docker机器上,实现一次打包,到处运行。Dockerdocker机器上,Dockerk8s参考(k8s):参考Docker:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到Linux机器上,也可实现虚拟化。k8s:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论