1.java如何实例一个对象(new)
https://blog.youkuaiyun.com/topdeveloperr/article/details/81194654
我们在编辑器里写的是.java文件,编辑器帮我们生成对应的.class文件,所以jvm读取的是.class文件
.class文件要经过加载,链接,初始化
加载是加载静态代码块和静态变量,不包括成员变量
同时在内存中生成一个.class对象
2.mybatis里面的resultmap的property和column指的是啥
数据库里的字段名/列名 column 是 roleName,而 User 对象的属性名则为 userRoleName ,此时就需要做映射
数据库字段信息与POJO对象属性不一致或者需要做复杂的联合查询以便自由控制映射结果
3.mybatis里面xml文件写输入的时候,即比如输入的是一个自定义类,parameterType=User,此时可以在SQL语句中直接调用这个User里面的对象属性,直接写他的名字就好了,id,name之类的

3.spring中ref和value的区别
需要被初始化的Bean是一个类class,所以你这时就不能用value来赋值,要用的ref来赋值了
https://blog.youkuaiyun.com/yongh701/article/details/78475266
4.AOP中切点与切入面的理解,executation参数讲解
https://blog.youkuaiyun.com/volcano1995/article/details/89111140
所谓的切入面类,就是这个类里面的所有方法method都可以作为advice消息通知器,就是before,after这类的,所以通知其实是类的方法method

如果不使用切面类就这样写,这里的ref就是切面类
https://www.cnblogs.com/rainy-shurun/p/5195439.html
里面讲了execution参数
5.spring中的autowire和qualifier
可以放在类里面对属性的定义上,private。。。的时候加

同时也可以在类里面的set方法上使用,甚至放在属性定义的上面的时候,整个类可以省略set方法
@qualifier这个注解是是对auto wire的补充,我们现在可以指定名字来实现属性的注入,即自动绑定IOC容器中的类

用spring融合mybatis
原始的mybatis框架的中的open sqlsession的流程可以看成是
inputSrream=Resource.getResoruceAsStream(resouce)
sqlSessionFactoryBuilder().build(inputStream)
像这样的实例化对象的过程在spring里面都被简化了,通过专门的xml文件写进容器里面,此时

datasource是mybatis-utilis.xml文件里面关于连接数据库的配置信息
sqlfactory连接了inputstream,并实例化了sqlfactory
springmvc里的非注解开发
1.当你输入网址localhost:8080:…/hello时,mvc怎么帮你找到这个网址对应的controller的处理类,这个处理类是怎么把处理好的视图交给视图解析器,视图解析器怎么匹配到对应的jsp文件,然后显示到用户面前的
首先我们使用的是BeanNameUrlHandlerMapping的方法来匹配输入的网址和我们的处理类controller,所以我们需要在web.xml中再加一个类来表明

这样一个类的声明可以确保我们输入/hello的网址,会帮我们匹配到我们写的hellocontroller的文件,所以这句话是一个处理器映射器
那么进入这个类之后,我们进行了处理(比如从数据库拿数据出来),现在我们要把处理好的视图给视图解析器,但是视图解析器需要帮我们把自己处理的视图,和待展示给用户的jsp连起来,所以在web.xml文件中,我们配了prefix和suffix,里面的值是我们工程的路径名

同时我们在controller类中通过mv.setMvName的方式为我们处理好的视图命名,比如hello,这样这个处理好的视图会和/WEB-INF/jsp/hello.jsp绑定,实现了输出
2.注解开发
注解首先在我们的controller类上加上@controller,这样这个controller类就注册在了spring容器里,不需要在web.xml文件里注册,但是我们怎么知道输入哪个网址就可以转到这个处理类来处理呢,就需要@requestmappering来实现url的请求,这样url就和我们这个类绑定了.
那这个类怎么和jsp绑定呢,可以使用return "hello"的方式,还是通过视图解析器的prefix和suffix,实现绑定,也可以
tomcat和servlet
tomcat是web服务器+servlet容器。客户端的请求直接打到tomcat,它监听端口,请求过来后,根据url等信息,确定要将请求交给哪个servlet去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
当请求来容器第一次调用某个servlet时,需要先初始化init(),但当某个请求再次打到给servlet时,容器会起多个线程同时访问一个servlet的service()方法。
Servlet容器默认是采用单实例多线程的方式处理多个请求的:
1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在一个Servlet实例);
2.容器初始化化Servlet主要就是读取配置文件(例如tomcat,可以通过servlet.xml的设置线程池中线程数目,初始化线程池通过web.xml,初始化每个参数值等等。
3.当请求到达时,Servlet容器通过调度线程(Dispatchaer Thread) 调度它管理下线程池中等待执行的线程(Worker Thread)给请求者;
4.线程执行Servlet的service方法;
5.请求结束,放回线程池,等待被调用;
(注意:避免使用实例变量(成员变量),因为如果存在成员变量,可能发生多线程同时访问该资源时,都来操作它,照成数据的不一致,因此产生线程安全问题)
从上面可以看出:
第一:Servlet单实例,减少了产生servlet的开销;
第二:通过线程池来响应多个请求,提高了请求的响应时间;
第三:Servlet容器并不关心到达的Servlet请求访问的是否是同一个Servlet还是另一个Servlet,直接分配给它一个新的线程;如果是同一个Servlet的多个请求,那么Servlet的service方法将在多线程中并发的执行;
第四:每一个请求由ServletRequest对象来接受请求,由ServletResponse对象来响应该请求;
重定向与请求转发
请求转发:(感觉就是正常的servlet工作流程)
客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
重定向:(是让客户端重新发一个url请求,servlet本身的数据都丢了)
客户发送一个请求到服务器,服务器匹配servlet,servlet处理完之后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。(服务器向浏览器发送一个302状态码以及一个location消息头,浏览器收到请求后会向再次根据重定向地址发出请求)
web作用域

一个浏览器窗口里面传递,就是同一个窗口,可以点旁边不同的侧边栏,都保有这个数据
session从用户访问到用户结束,120min
session是同一个浏览器访问多次,多次访问内传递消息
那么我进行了登陆加退出,那岂不是我的session即使在退出之后仍然保存——————确实是这样的,不在每次logout中销毁session的话,就会出现session中的username和pwd仍然保存在浏览器内
————————session的信息保存在哪里?本地的浏览器还是服务器?——————————服务器
异步请求里的request是一个异步请求一个request吗
只要在JSP文件里调用request,那么前后端就没有分离,真正的分离前端界面只能调用response,而这个response是通过ajax请求发送
现在的前后端开发,前端也会进行一次认证
认证是在前后端第一次交互的时候会给本地的cookie生成一个token或者秘钥之类的东西
然后每次交互都会携带这个秘钥,所以前端网页才能进行判断
但是如果不这样做,那前端的cookie发什么后端就认证了,很不安全
就是前端用李睿洁的账号密码登陆,但是cookie里面改成刘旭宸,后端就会认为是刘旭宸登陆了,返回给李睿洁一个刘旭宸的资料界面
https://www.cnblogs.com/l199616j/p/11195667.html
动态代理
动态代理的好处到底有啥:1.静态代理里面一个接口,正常的委托类要实现这个接口,代理类也要实现这个接口
像是wedding这个接口
me要实现,婚庆公司也要实现,所以如果我们在原接口里加一个方法,会要改double个
但是在动态代理里面,由于代理类是自动生成的,我们只有工厂类,也就是必须实现的那个类(因为JDK中动态代理必须要接口,其实这个接口也可以省略的)才用去更改,所以更方便
脚本语言和解释器和编译器
脚本语言(Python)是更高级的语言,是通过解释器来运行的,跳过了编译的过程。所以无需编译,直接运行,速度更快,且不想编译语言那么严谨,因为编译是全局编译
那么解释器是啥,感觉是计算机内核和我们写的脚本语言之间的桥梁,负责把我们写的脚本语言翻译成内核,即硬件能理解的语言。所以真正执行的速度来说,java经过编译之后生成的.class即字节码文件在被JVM解释成硬件语言后硬件直接运行,跳过了解释的过程,所以运行起来速度很快。但是需要先编译
Java是伪跨平台,不同操作系统(平台)上必须要有对应的JVM,字节码是跨平台的,但是需要JVM编译后才能运行
@Bean注解的理解,与@configuration的比较
常规的MVC工程中,我们需要在不同的层,DAO,CONTROLLER中的类要注册到IOC容器中,此时这个类就被注入了。但是这样的@controller的注解只能注解类,而且是自己写的,如果有一个第三方的类出现,我们想完成赋值并注入,用@controller就不合适了(?是因为不知道把它放在哪一层吗?),所以我们就要通过构造一个方法的形式来完成对这个类的赋值,然后把赋值好的类注射到IOC中,所以就出现了@Bean,他只能放在方法上,是将这个方法返回的类注入到IOC容器
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法
看这几篇,很不错:
https://blog.youkuaiyun.com/liuyinfei_java/article/details/82011805?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5.pc_relevant_default&utm_relevant_index=7
https://blog.youkuaiyun.com/qq_34484062/article/details/101283056?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_antiscanv2&utm_relevant_index=2
https://www.cnblogs.com/yanggb/p/14897327.html
@component和@configuration的区别?我看不懂
https://blog.youkuaiyun.com/long476964/article/details/80626930
其中的这个回答

我们在调用注入到IOC容器的对象的时候,走的都是单例模式,具体体现在autowired上面,但是,文章验证的方式不是走的IOC容器中调用的方式,而是在@bean的类里面new了一个对象出来——这是个代理而不是调用,所以才会触发两个注解之间的区别
所以这个东西是在动态代理的时候需要注意,因为动态代理才会涉及到代理模式
为什么POJO不注入到IOC中
https://blog.youkuaiyun.com/qq_40602785/article/details/105168547
在实际开发中用户的需求是不断变化的,而为了满足用户需求变化的同时不改变原有代码就需要引入 IOC 。这些实体类不会因为用户的需求变更而改变
自己配置yml文件实现配置
https://blog.youkuaiyun.com/li1325169021/article/details/116768787
springboot里的XXXXproperties就是实体类,里面只设计了各个属性和对应的get/set方法,而对这个实体类进行操作的部分放到了对应的configuration里面
XXXXconfiguration文件里的注释@EnableConfigurationProperties的含义是把对应的XXXXproperties注册到IOC容器中,其实在properties文件里加@component也可以,这样也可以保证这个实体类被保存到IOC容器中,但是我认为放到configuration文件中才注册是因为确定这个configuration文件和哪个properties文件绑定
spring问号传参为什么不符合前后端分离
https://blog.youkuaiyun.com/sswqzx/article/details/84195043
我觉得就是在后端controller里面需要加上@RequestParam这个注释来进行参数匹配,要求url里面?后面的属性名和controller函数里面接受的属性名一致,所以不符合分离
redis布隆过滤器缓存击穿
https://blog.youkuaiyun.com/weixin_33811539/article/details/92260304
理论上来说,如果黑客使用一个不存在的key去redis里查询,这样redis会疯狂的向MySQL发送查询请求,这样缓存就被击穿了。那么解决方法就是先判断这个key存不存在,不存在就直接返回了。
所以加一个布隆过滤器,能判断出不存在和可能存在,所以将不存在的请求返回(??那么问题来了,布隆过滤器怎么知道key在MySQL里存不存在呢,难道是MySQL里的所有数据全部备份到了redis里面??)
MySQL隔离级别-serializable
https://www.cnblogs.com/dreamofprovence/articles/11666077.html
总而言是添加了表锁,而不是行锁,只要事务 没提交,表的内容都看不见
shiro
如果cache里面获取不到info,我们会调用realm里面的方法(doget),像是在JDBCrealm中,我们会有一些默认的常见查询语句,但是需要我们后期修改
登陆过程中的所谓利用subject来进行登陆,指的是securityutils.getsubject.login,通过这个subject进行登陆,然后转交给securitymanager进行处理
为什么前后端分离就不能使用session而要使用cookie了呢
https://blog.youkuaiyun.com/bibiboyx/article/details/98034391
跨域怎么保持登陆状态呢
https://www.jianshu.com/p/79225bd8a9c9
传统的是基于cookie+session
现在用的是cookie,所以比如我从我这里点击一个链接跳转到淘宝的界面,我怎么保证这个淘宝界面我是登陆状态呢,理论上cookie信息不能跨域,所以是用token保持的。token信息可以跨域吗?不应该是每个域和浏览器对应有自己独自的一个token吗,csrf攻击能让本地的浏览器自动发送cookie,但是token不是主动发送的
前面讲到CSRF的另一个特征是,攻击者无法直接窃取到用户的信息(Cookie,Header,网站内容等),仅仅是冒用Cookie中的信息。
而CSRF攻击之所以能够成功,是因为服务器误把攻击者发送的请求当成了用户自己的请求。那么我们可以要求所有的用户请求都携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF的攻击。
把token放在http请求当中,这样别人就获取不到
https://tech.meituan.com/2018/10/11/fe-security-csrf.html
为什么我们能冒用别人的cookie,cookie不也是存在本地的吗
是浏览器背大锅吗,浏览器为什么要设置能够默认携带别人的cookie
怎么实现登陆保持的
为什么链接就是个taobao.com但是却可以在里面装入我的token,不应该是个很长的字符串码,这些字段是在哪里加入吗

@mapper与@mapperscan
@Mapper 注解针对的是一个一个的类,相当于是一个一个 Mapper.xml 文件,使用@mapper后,不需要在spring配置中设置扫描地址
在启动类的上面加上mapperscan就可以省去在每个mapper接口上都使用@mapper这个过程
@Lazy
spring对象的正常加载是在创建spring的容器时,会创建配置文件中的所有的独象(有几个bean标签就调用几次无参构造函数,就创建几次对象)
但是加了@lazy懒加载的注释后,对象在被使用的时候才创建
只要对象是多例模式 则都是懒加载! 在单例模式中控制懒加载才有效
但是实例化的时候需要考虑到依赖注入,否则有的类依赖别的类,理论上是一起实例化比较合适,具体的步骤如下:
spring已经把需要的注册的bean的信息已经全部加载到了BeanFactory中了,那么之后要做的事儿当然就是进行实例化了,当然了可能有人会问为何不在加载到bean信息的时候直接进行实例化呢,这不还需要依赖注入嘛,当然是要所有的都加载完了才能实例化
本文深入探讨Java中对象实例化、MyBatis映射、Spring框架中的依赖注入及AOP切点等关键技术,解析Tomcat与Servlet的工作原理,阐述动态代理的优势,以及介绍Spring Boot配置实践。
1381

被折叠的 条评论
为什么被折叠?



