- 博客(81)
- 收藏
- 关注
原创 尚硅谷谷粒商城-商品项目表设计
spu和sku区别 spu指的是同一种商品的规格和配置,例如华为笔记本电脑MateBook D 14这个型号的产品,他们都有相同的cpu,显卡配置等,而sku指的是某一个专门的商品,他在spu的基础上增加了硬盘内存多大,什么颜色等等。 表信息结构...
2022-05-29 15:46:06 266
原创 MyBatis知识点总结
MyBatis知识点总结一. MyBatis核心组件1.SqlSessionFactoryBuilder(构造器):根据配置和代码生成SqlSessionFactory,采用分布构建Builder模式。2.SqlSessionFactory(工厂接口):生成SqlSesssion,使用工厂模式。3.SqlSession(会话):既可以发送sql执行返回结果,也可以获取Mapper的接口。4.SqlMapper(映射器):由Java接口和XML文件构成,需要给出对应的映射规则,负责发送SQL执行(底
2022-03-13 18:32:40 1427
翻译 spring2
(https://img-blog.csdnimg.cn/bb9e5f8b212a4c16a85af2e6ccdb7d2d.jpg?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2FuYWJlNzc3,size_20,color_FFFFFF,t_70,g_se,x_16)(https://img-blog.csdnimg.cn/f2bb9cfccb804819b63c196f7121a89a.jpg?x-
2022-02-22 15:29:11 83
原创 【无标题】
JavaScript学习(2)1.在标签中,存在三个子标签,,分别表示表格的表头部分,表体部分, tfoot表格的脚。2.每次触发事件时(点击鼠标),计算机都会记录下来一个事件对象,里面包含事件信息(例如鼠标的xy坐标之类的东西),想要获得这个对象,就在写事件函数的参数中加一个形参即可。div.onclick = function(e){}(e即为事件对象)3.事件的传播,前端中当你触发一个事件时,会从外向内渗透,由windows->document->html->body->
2021-12-19 13:10:42 737
原创 【无标题】
JavaScript学习(1)1.alert(100) --在页面上弹出弹窗100。2.document.write(100)–直接出现100,没有弹窗。3.js中的基本数据类型,包括,数值类型,字符串类型,布尔类型,和空类型(null(定义值为null),Undefined(未定义)),引用数据类型。4.prompt("…")在浏览器弹出一个输入框。5.数组常用方法:arr.push(x),把x放到数组的最后;arr.pop(),删除数组的最后一个元素;arr.unshift(x),向数组
2021-12-18 18:58:48 194
原创 2021-11-02
spring事务详解三大组件1.platformTranscationManager:规定了事务的核心机制,是事务的一种实现规范,包括了事务的回滚,提交等方法2.transcationDefinition:规定了事务的5个核心特点,隔离级别,传播机制,超时时间,回滚机制,是否只读。3.transcationStatus:获取事务状态,事务本身。事务的俩种实现方式,编程式事务以及声明式事务,編程式与业务的代码混合,不利于维护,使用platformTranscationManager定义事务后,提供
2021-11-02 21:08:45 118
原创 2021-11-02
jvm相关参数配置-Xss 配置虚拟机栈的最大内存-Xss1m/-Xss1024k/-Xss1048576“-Xms"和”-Xmx"设置堆内存-XX:+PrintGCDetails 显示GC细节配置新生代与老年代在堆结构的占比默认-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3可以修改-XX:NewRatio=4,表示新生代占1,老年代占4,新生代占整个堆的1/5在HotSpot中,Eden空间和另外两个survivor空间缺省所占的比例是8 : 1 : 1
2021-11-02 18:19:13 68
原创 2021-10-29
TCP/IP三次握手四次挥手TCP协议每次新连接都会创建一段新的32位随机的序号,之后每次发信息都在此基础上+1,32位确认序列号称为ack(基本都是记录序号+1)三次握手四次挥手会用到6个标志位中的3个,ack位(表示回应),fin(表想结束)位syn(表想开始)位、TCP/IP协议是传输层的一个面向连接的安全可靠的传输协议。三次握手的机制是为了保证能建立一个安全可靠的连接;第一次握手是由客户端发起,客户端会向服务端发送一个报文,报文里面SYN标志位是置1的,当服务端收到这个报文的时候就知道客户端
2021-10-29 14:43:31 1017
原创 2021-10-26
项目一总结在线考试系统重难点总结:1.如何查询用户的权限,登录时拿到用户id,根据id查询其属于那个分类(管理员,老师,学生),在根据拿到的信息查询职业对应权限表,拿到权限数据后对着权限总表的父子级关系,封装完成后返回即可。2.如何改变用户的权限,前端使用element_ui提供的el-tree,后端提供按照el_tree规则封装的数据,通过checkkeys属性把我们想要赋予的权限打勾,不想要的不做处理后,封装的数组返回后端进行父子关系的逻辑处理。3.如何把试题导入excel表格中,利用vue提供
2021-10-26 22:56:51 71
原创 2021-10-24
阶段一知识点复习1.注解注解一共分为3大类:JDK自带注解元注解自定义注解1.1 JDK注解JDK注解的注解,就5个:@Override :用来标识重写方法@Deprecated标记就表明这个方法已经过时了,但我就要用,别提示我过期@SuppressWarnings(“deprecation”) 忽略警告1.2 元注解用来描述注解的注解,就5个:@Target 注解用在哪里:类上、方法上、属性上等等@Retention 注解的生命周期:源文件中、字节码文件中、运行中该注解定义了
2021-10-25 15:54:53 115
原创 2021-10-23
项目二概况基于Spring Security,JWT,Oauth2的单点登陆系统+redis秒杀案例1.建立基础框架,sca-resource,负责文件上传操作,用serlvet的 multipart:maxfilesize配置上传大小,resources:static-locations配置访问路径(原先在resource下的static目录)。在service中用MultipartFile接收文件,拿到文件后,首先创建目录,以当前时间的年月日进行分类,之后要给文件起个名字,之后用transferT
2021-10-23 19:02:00 117
原创 2021-10-14
redis秒杀案例总结1.利用redis的string存储商品信息,key为商品名字,value为库存量。2.利用redis的set储存秒杀成功的人员id(唯一)。3.做一个简易的web页面,点击就开始秒杀。4.点击时把id传到后端,首先检测id是否在set中,在的话就返回(秒杀过了),之后检测商品的库存是否还够,不够返回。之后就可以进行操作,让商品库存-1,记录人员id。5.上面的会有问题,1,连接超时问题,2,并发问题,解决方案:1,使用jedisutil的连接池,2,使用redis 中的事务
2021-10-19 19:56:52 77
原创 2021-10-14
多线程(6)通过管道实现线程间的通信在java.io中的 PIpeStream管道流,用于在线程之间传送数据。一个线程发送数据到输出管道,另一个线程从输入管道中读取数据。PipeInputStream , PipeOutStream, PipeReader , PipedWriter。public class Test { public static void main(String[] args) throws IOException { /*定义管道字节流*/
2021-10-14 19:19:50 83
原创 2021-10-14
多线程(5)生产者消费者模式生产者消费者模式生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例。生产者生成一定量的数据放到缓冲区中,然后重复此过程;与此同时,消费者也在缓冲区消耗这些数据。生产者和消费者之间必须保持同步,要保证生产者不会在缓冲区满时放入数据,消费者也不会在缓冲区空时消耗数据。不够完善的解决方法容易出现死锁的情况,此时进程都在等待唤醒。保证同一资源被多个线程并发访问时的完
2021-10-14 18:26:23 52
原创 2021-10-13
多线程问题(4)常用原子类进行自增自减操作我们知道i++不是原子操作,除了使用Synchornized进行同步外,也可以使用Atomiclnteger/AtomicLong原子类进行实现。java.util.concurrent.atomic的包里有``AtomicBoolean, AtomicInteger,AtomicLong,AtomicLongArray,AtomicReference`等原子类的类,主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理.在Java语言中,++i和i
2021-10-13 12:50:45 58
原创 2021-10-13
多线程知识点(3)volatile作用volatile可以保证内存可见性且禁止重排序可以强制线程从公共内存中读取变量的值,而不是从工作内存中读取。volatile 与 synchronized比较1)volatile 关键字是线程同步的轻量级实现,所以volatile性能比synchronized更好,volatile只能修饰变量,而synchronized可以修饰方法,代码块。随着JDK新版本的发布,synchronized的执行效率也有了很大的提升。在开发中我们使用synchronized的
2021-10-13 12:46:07 50
原创 2021-10-12
多线程安全问题(2)线程安全问题什么是线程安全问题?当多个线程对同一个对象的实例变量,做写(修改)的操作时,可能会受到其他线程的干扰,发生线程安全的问题。原子性(Atomic):不可分割,访问(读,写)某个共享变量的时候,从其他线程来看,该操作要么已经执行完毕,要么尚未发生。其他线程看不到当前操作的中间结果。 访问同一组共享变量的原子操作是不能够交错的,如现实生活中从ATM取款。java中有两种方式实现原子性:1.锁 :锁具有排他性,可以保证共享变量某一时刻只能被一个线程访问。2.CAS指令
2021-10-12 22:22:52 50
转载 2021-10-12
Synchronized的使用1.为什么要使用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2.实现原理synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性3.synchr
2021-10-12 20:48:52 52
原创 2021-10-12
多线程知识点总结(1)1.创建线程的方法1)继承thread类,重写run方法,创建对象时直接new即可。2)实现runnable接口,实现run方法,创建对象时new Thread(Runnable)注意:Thread t1=new thread(runnable)中,t1的构造方法为init(target),target即为runnable的实现类对象,在t1调用run方法时,调用的是实现类的run方法(如果有的话)。2.多线程常用方法1)currentThread(),返回当前执行线程2
2021-10-12 15:09:58 64
原创 2021-10-09
第三方登录流程解析(基于oauth2.0)oauth2解决的问题是你在上网登录一个客户端的时候,可能客户端比较小众,不受你的信任,你不放心把密码安全的交给他,这个时候就可以使用第三方登录来解决问题,通过一个你信任的网站,让客户端通过这个网站来得到你的基本信息,从而避免了密码模式的信息泄露问题。这里我们拿百度网盘和qq作为例子,我们的目的是使用qq作为第三方登录百度网盘,总结出以下几个流程:1)首先,客户端访问百度网盘的登录界面,点击第三方登录。2)百度网盘重定向到qq服务器,让用户输入账号和密码,
2021-10-09 10:04:13 1995
原创 2021-10-06
SpringMVC源码解析springmvc流程首先,springmvc有不同的部署方式(运行方式),不同的方式对应的handler,handleradapter也不相同。这里介绍三种配置方式。1)通过web.xml配置2)通过官网提供的方法+配置类+@component(继承controller),Bean配置3)通过@Controller配置这三种对应的handler不同,适配的adapter也不同。dispatcherServlet详解,它是继承servlet的一个类,前端控制器,负责
2021-10-06 19:24:17 64
原创 2021-10-05
Servl知识点总结(2)1.转发2.重定向3.servlet生命周期4.servlet线程安全问题5.cookie6.session
2021-10-05 16:13:43 67
原创 2021-10-05
Servlet 知识点总结(1)1.俩种架构方式(1)cs架构(2)bs架构2.servlet概念3.http协议概念4.serlvet创建方式
2021-10-05 15:53:20 61
原创 2021-10-04
105. 从前序与中序遍历序列构造二叉树思路:这题可以从先序中取出第一个元素,这个一定是根元素,之后根据这个找到中序遍历中的位置,它的前后即为左右子树的个数,大问题拆分成小问题,注意边界即可。class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return build(preorder,inorder,0,0,inorder.length-1); } public
2021-10-04 22:29:55 40
原创 2021-10-02
工厂模式总结 工厂模式是非常常用的一种设计模式,比如spring的bean工厂底层就是运用到了工厂模式,首先介绍一下简单工厂,它并不是一种设计模式,只是一种大家常用的设计方法。核心就是把事务的核心特性抽取出来,接口化,之后通过实现这个接口从而达到实现其核心和功能,最后生成一个工厂来管理生成这些对象。interface door{ float setHeight(); float setWidth();}class WoodenDoor implements door{
2021-10-02 23:17:02 46
原创 2021-10-02
代理模式详解 在学习spring的时候发现spring的aop底层用的就是代理模式,JDK,CGLIB代理方式,研究了一下,总结一下自己的理解。 代理模式分为静态代理和动态代理,核心思想就是在原有的方法上做出增强,而aop正好切合了这个思想,就借用代理模式进行实现。 静态代理是在编译期间就需要完成的,编译完成了之后程序就已经知道了你的代理对象是谁,这样一旦代理对象很多的话,就会造成代码冗余不好维护。package model;interface Speaker{ void speak(
2021-10-02 12:59:47 53
原创 2021-10-01
104. 二叉树的最大深度直接递归即可class Solution { public int maxDepth(TreeNode root) { if(root==null) return 0; int left=maxDepth(root.left); int right=maxDepth(root.right); return Math.max(left,right)+1; } }...
2021-10-01 23:24:11 79
原创 2021-10-01
100. 相同的树思路:这题比较简单,直接写一个递归式,同时递归俩个树,递归的同时比较这俩个节点,要是不同了就给flag变成false;class Solution { private boolean flag=true; public boolean isSameTree(TreeNode p, TreeNode q) { convert(p,q); return flag; } public void convert(TreeNode
2021-10-01 23:20:09 78
原创 2021-10-01
333. 最大 BST 子树思路:这题用递归,如果root是bst树,就返回其节点值,返回时与最大的节点值进行比较,更新最大值,若不是,直接返回-1,需要注意的就是怎么判断这个树是不是bst树,需要那root的值和左子树的最小值以及右子树的最大值进行比较!class Solution { private int maxCount=0; public int largestBSTSubtree(TreeNode root) { count(root); re
2021-10-01 22:55:28 47
原创 2021-09-24
250. 统计同值子树这题的题目理解有点难,主要意思是计算出有多少颗值相同的子树,需要从根节点开始计算,用遍历的算法,先左右,在自己,设置一个标志位,判断子树的值是否相同,用一个count来计数,如果左右子树和根节点都符合条件count++,若是有不符合条件的,从那个节点向上就都不符合条件了!class Solution { private boolean flag; private int count=0; public int countUnivalSubtrees(Tre
2021-09-24 08:51:30 77
原创 2021-09-22
236. 二叉树的最近公共祖先思路,递归,写递归一定要先确定递归函数的性质,也就是他的作用,之后基于你定义的作用来写,我定义的是 该函数返回对于给定root根节点下,p,q,俩个子节点的最近公共祖先节点,定义完成之后,就针对你的定义写。首先,root要是null,直接返回,或是root=p说明,p正好作为根节点被传入,而q一定是在p的子结点上,直接返回q(p同理)。之后用left,right分别记录遍历左边,右边节点的返回值,要是都不为空,那么肯定p,q在root 的左右,要是有一个为空,说明p,
2021-09-22 21:40:33 45
原创 2021-09-22
求二叉树根节点到任意一点的路径用的是dfs思想,用一个stack来遍历二叉树,遍历该点之后回溯数据,在stack中清除该节点,直到找到所需要的节点后用list存储即可。class ttest{ private static Stack<TreeNode> treeNodes=new Stack<>(); private static List<TreeNode> path; public static void main(String[] ar
2021-09-22 20:47:21 51
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人