![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
阿祥l
励志成为百万博主
展开
-
Spring Cloud和dubbo有什么区别?
1.dubbo有很多不全面的方面,需要继承很多东西,例如日志,监控,追踪等等,但是Spring Boot自己都自带了。2.Dubbo使用了第三方的ZooKeeper作为其底层的注册中心,实现服务的注册; SpringCloud使用Spring Cloud Netflix Eureka实现注册中心;3.服务网关: Dubbo没有本身的实现,只能通过其他第三方技术的整合; SpringCloud有Zuul路由网关。...原创 2022-01-18 19:09:53 · 2167 阅读 · 0 评论 -
ConcurrentHashMap,HashMap和Hashtable?
ConcurrentHashMap是线程安全的,并且效率也不低,因为它是对每个线程都分别加锁,不是对整个加一个大的锁,它的锁是加在segment上的。HashMap是线程不安全的,可以存储null值,但是只能有一个null键,因为它是继承map的所以也是键值对存储,它的存储长度默认是16,每次扩容为原来的2倍,并在java8以后对HashMap有了更深一步的提升,它在解决哈希冲突时,当链表长度大于等于8时将转换成红黑树,当链表长度小于等于6时再转换成链表,中间有一个7是因为避免频繁的在链表和红黑树之间原创 2022-01-13 16:09:43 · 245 阅读 · 0 评论 -
synchronized的底层实现原理
底层使用指令码方式来控制锁的,映射成字节码指令就是增加来两个指令:monitorenter和monitorexit。当线程执行遇到monitorenter指令时会尝试获取内置锁,如果获取锁则锁计数器+1,如果没有获取锁则阻塞;当遇到monitorexit指令时锁计数器-1,如果计数器为0则释放锁。...原创 2022-01-05 14:44:51 · 265 阅读 · 0 评论 -
Spring mvc的执行流程:
1.用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;3.DispatcherServlet 根据获得的Handler,选择一个合适的Ha...转载 2021-12-30 13:58:03 · 186 阅读 · 0 评论 -
ArrayList为什么线程不安全?
ArrayList 底层基于数据实现的,是一个动态的数组,容量自动增长;尽量扩容时,会将老的数组的内容重新拷贝一份到新的数组中,每次扩充为原来长度的1.5倍。它在使用add方法时会执行两个步骤:1.将元素放在当前位置;2.将数组下标+1;为什么线程不安全?假设现在有两个线程,线程A和线程B,当他们两个同时执行add()方法的时候,线程A先将自己的当前数据存到下标0的位置,(只执行了一步)然后线程A就会被停止操作,由线程B进行存储,线程B也将自己的当前数据也存储到了下标0...原创 2021-12-28 19:32:02 · 2270 阅读 · 0 评论 -
自定义注解的使用流程:
1.先使用元注解@Target定义这个自定义注解的作用域 2.在使用元注解@Retention定义这个自定义注解在什么时候运行 3.然后写一个@interface MyAnnotation{} 4.在{}中定义注解参数的就好了。...原创 2021-12-26 13:16:37 · 380 阅读 · 0 评论 -
线程的生命周期
线程是一个动态执行的过程,它也有一个从产生到死亡的过程。 五个状态 新建状态 就绪状态 运行状态 堵塞状态 死亡状态 新建状态:使用new关键字和Thread类或者子类建立一个线程对象后,它会一直保持这种状态,直到程序运行到start()方法才会进入就绪状态; 就绪状态:就绪状态的线程处于就绪的队列中,要等待JVM里线程的调度器的调度;如果就绪状态的线程获取到了cup的资源,就可以执行run()方法,这时候就进入了运行状态; 运行状...原创 2021-12-21 09:36:07 · 58 阅读 · 0 评论 -
十进制的数在内容中是怎么存储的
是以二进制补码的形式。原创 2021-12-15 19:27:02 · 392 阅读 · 0 评论 -
为什么在hashMap中重写equals()要先重写hashCode()
hashMap底层是一个链表散列的结构,也就是数组和链表的组合,在hashMap中put的时候要先判断一下数组的长度是否为空,如果为空的话就要先进行扩容,如何存到相应的位置;如果数组长度不为空,那么就代表数组中原来有值,那就要对key的hashCode进行重新计算,如果数组中已经存在的key的值的hashCode没有和当前key的HashCode相同的话,就把当前的key存到数组中hashCode当对应的位置,如果hashCode有相同,就用equals()去比较内容一样不一样,一样的话就覆...原创 2021-12-13 20:10:35 · 428 阅读 · 0 评论 -
static和final的区别
static:是静态的意思;final:是最后的意思;区别:1.final可以修饰类,方法和变量,但是static只能修饰方法和变量;2.final可以修饰全局变量和局部变量,但是static只能修饰全局变量,不能修饰局部变量;3.final不可以修饰代码块,但是static可以修饰代码块。...原创 2021-12-09 17:59:02 · 5627 阅读 · 3 评论 -
BIO、NIO、AIO的关系
BIO是同步阻塞式IO,是传统的IO,优点是:使用简单方便;NIO是同步非阻塞式IO,是传统IO的升级,服务器和用户通过通道通信,实现了多路复用;AIO是异步非阻塞式IO,是NIO的升级,也叫做NIO2,异步IO的操作基于事件和回调机制。...原创 2021-11-25 14:28:42 · 173 阅读 · 0 评论 -
使用java将数据导入excel表格中
1.使用创建一个工作簿;2.获取表中的页;3.从页中获取行;4.从行中获取表格;5.在表中添加数据;6.写一个输出流;7.将数据传入表格。Cell cell0 = row.createCell(0);从这里可以看出下标从0开始。写完执行代码就可以导出数据到excel中了...原创 2021-11-24 18:48:37 · 2484 阅读 · 0 评论 -
腾讯云的手机验证码发送
我们需要三个步骤:1.随机生成一个验证码;2.写腾讯云发送验证码的流程。3.写一个主方法去调用即可。首先我们就要写一个生成验证码的方法:这里的参数是你要设置验证码的长度为多少。然后我们再去写腾讯云发送验证码的流程。这里的参数是要发送到验证码的手机号和生成的验证码。最后写一个主方法去调用即可。这里在主方法中填入手机号和生成的验证码的位数就好了。希望有用的小伙伴,可以关注点赞一下,一起进步!...原创 2021-11-21 15:13:57 · 423 阅读 · 0 评论 -
Spring中的相关知识点
Spring:是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器(框架)。IOC:控制反转;什么是IOC? Inversion of Control的简称,即“控制反转”,不是什么技术,而是一种设计思想。IOC理解: IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。谁控制谁,怎么控制? 由IOC容器来专门创建这些对象,并由IOC来控制对象和外部资源的创建和获取,实现由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。为什么是反转,什...原创 2021-11-20 18:36:11 · 70 阅读 · 0 评论 -
在类 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)
出现这个异常的时候如果说你是写有main方法的话很大可能就是没保存写的代码就去执行程序了,Ctrl+S保存一下就好了。希望可以帮助大家,点赞关注一下我大家一起学习。原创 2021-11-18 09:13:28 · 2149 阅读 · 1 评论 -
在写项目时怎么样可以有效的防止重复提交
我在这里整理了四种方式: 1.禁掉提交按钮,也就是说当表单被提交后,在js中将按钮设置成disable;虽然可以有效的防止重复提交,但是用户如果禁止了js,就没办法防止重复提交了; 2.Post--Redirect--Get模式,在点击提交以后就会对页面进行重定向,转到提交成功后的页面,这样就可以防止按F5重复提交; 3.在session中存一个特殊的标识,当表单页面被请求时,生成一个字符标识串,放在session中,并存在表单的隐藏域中,接受处理...原创 2021-11-17 09:02:47 · 893 阅读 · 0 评论 -
JSP的三大指令
Page:用于针对当前页面指令;Include:用于指定如何包含另一个页面;Talib:用于定义和指定自定义标签。大家一起努力学习!原创 2021-11-16 08:30:46 · 80 阅读 · 0 评论 -
session 的工作原理
首先 先说session是存储在服务器上的一个值;每次用户在登录完成之后,服务器就会给该用户创建一个与之对应的session id,然后把该session id 发送给用户,咋样用户每次访问浏览器的时候就会对比这个session id 去服务器中找到对应的session id,然后就可以正常工作了。用户登录账户------》服务器给用户创建session id,并发送给用户------》用户接收session id,访问浏览器的时候找到服务器中对应的session id ------...原创 2021-11-15 20:05:46 · 85 阅读 · 0 评论 -
线程的五大状态和运行流程
五大状态分别为:创建状态----就绪状态---运行状态----阻塞状态-----死亡状态;流程:第一步:先用new 创建一个线程 这时候就是创建状态;第二步:我们没有使用这个线程,他就在等待被执行,这个时候是就绪状态;第三步:我们使用了start()方法去执行这个线程,这时就是运行状态;第四步:比如我们使用sleep()方法让他休息一下,这个时候就算是阻塞状态;第五步:线程任务完成,死亡了。这是我对线程的理解,希望对大家有用,点赞关注,学习更好开发知识。..原创 2021-11-13 15:24:33 · 1191 阅读 · 0 评论 -
在MyBatis中#{}和${}的区别,写MyBatis语句要注意什么
#{}代表相当于是一个占位符;${}代表是直接拼接;尤其是在拼接列名的时候一定要用${}直接拼接不然使用#{}会在获得的值加上一个单引号,SQL语句就报错了。例如:希望能对大家有帮助。...原创 2021-11-12 21:15:41 · 236 阅读 · 0 评论 -
MyBatis报Parameter Maps collection does not contain value for com.zyx.dao.StuDao.map错误
今天在写MyBatis框架相关项目的时候报了这么一个找不到Map的错误,找了半天没找到什么原因,后来发现是Mapper.xml文件中的parameterType="map"写成了parameterMap="map"。看代码:本来是:parameterMap="map":改为:parameterType="map"即可成功运行。欢迎大家使用。...原创 2021-11-11 13:39:54 · 710 阅读 · 0 评论 -
Map中的key和value
我们都知道的是map中可以存储一个null键和多个null值,并且键是唯一的不能重复,值可以重复。如果键重复了 那么后输出的会覆盖前面输出的。今天我发现了一个奇怪的地方,就是他的返回值,那么看下面的代码:map中的返回值总结: 如果没有重复的key,那么返回值value就是null; 如果有重复的key,那么会使用新的value值覆盖掉原来key中的值,但是返回值却是被覆盖的value值。...原创 2021-11-10 10:41:00 · 3290 阅读 · 0 评论 -
泛型的使用
泛型是一种未知的数据类型,泛型也可以当作是一个变量,可以接收数据类型。常见的有:E:element(元素);T:type(类型)。定义泛型好处: 1.避免了使用时类型转换异常,定义的是什么数据类型取出的就是什么数据类型; 2.把运行时错误转换成编译时错误。、弊端: 只能存储固定的数据类型。不定义泛型:好处: 可以存储不同类型的数据,默认的数据类型就是Object。弊端: 在使用时会出现异常,不安全。...原创 2021-11-09 21:20:04 · 78 阅读 · 1 评论 -
什么是API?
API是一个接口,并不是我们一般说的看API,那个是API文档。API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口) 。在controller方法上加上标签@ResponseBody,这个可被访问的方法就是一个标准的API,其实就是response的输出。...原创 2021-11-08 18:04:24 · 492 阅读 · 0 评论 -
逻辑删除写法
首先说一下展示:就是说我们在显示数据的时候可以又修改和删除数据等操作,在点击删除的时候,可以做一个假的删除功能,即:在展示页面不显示数据了 但是实际上数据库还有此数据。怎么去写:给数据库表中增加一个状态字段,给一个值比如给0;然后在查询数据的时候让他条件必须加上状态字段=0即可,点击删除按钮,让他去实现一个修改的功能,把状态字段改成1即可实现逻辑删除。希望此方法可以帮助到大家,谢谢。...原创 2021-11-07 17:56:20 · 1157 阅读 · 0 评论 -
上传文件为什么要选择post请求方式
因为get请求传输数据的大小最大最2KB,post请求方式要大得多。原创 2021-11-05 09:09:32 · 1123 阅读 · 0 评论 -
IOC和AOP的关系?
求大佬教原创 2021-11-02 15:43:39 · 301 阅读 · 0 评论 -
I/O流的分类
按照数据单位:字节流(二进制文件:音频)和字符流(文本文件);按照数据流的流向:输入流和输出流;按照流的角色:节点流,包装流(处理流)。抽象基类 字节流 字符流输入流 InputStream Reader输出流 OutputStream WriterInputStream,Reader ,OutputStream ,Writer都是抽象类。...原创 2021-10-29 09:18:17 · 76 阅读 · 0 评论 -
为 什 么 说 Synchronized 是 一 个 悲 观 锁 ?乐 观 锁 的 实 现 原 理又 是 什 么 ? 什 么 是 CAS, 它 有 什 么 特 性 ?
1.Synchronized 显 然 是 一 个 悲 观 锁 , 因 为 它 的 并 发 策 略 是 悲 观 的 :不 管 是 否 会 产 生 竞 争 , 任 何 的 数 据操作 都 必 须 要 加 锁 、 用 户 态 核 心 态 转换 、 维 护 锁 计 数 器 和 检 查 是 否 有 被 阻 塞 的 线 程 需 要 被 唤 醒 等 操 作 。2.随 着 硬 件 指 令 集 的 发 展 , 我 们 可 以 使 用 基 于 冲 突 检 测 的 乐 观 并 发 策 略 。先 进 行 操 作 , 如原创 2021-10-23 00:32:27 · 444 阅读 · 0 评论 -
为 什 么 说 Synchronized 是 非 公 平 锁 ?
因为Synchronized 获取锁的行为是不公平的,并非是按照申请对象锁的先后时间分配锁的,每次对象锁被释放时,每个线程都有机会获得对象锁,这样有利于提高执行性能,但是也会造成线程饥饿现象。...原创 2021-10-20 19:38:03 · 3055 阅读 · 0 评论 -
Synchronized其 原 理 是 什 么 ?
1.Synchronized是由虚拟机实现的一种互斥同步方式,当你查看被Synchronized修饰的程序块编译后的字节码时,会发现程序块被编译前后生成了monitorenter 和 monitorexit 两 个 字 节 码 指 令 ;2.在虚拟机运行到monitorenter 时,先获取对象的锁,如果对象没有锁定,或者当前线程已经拥有这个对象的锁,则把锁+1;运行monitorexit时则将计时器-1,当计时器为0时,锁就会被释放;3.如果对象获取失败了,那么当前的线程就要阻塞等待,直到对象锁被原创 2021-10-19 13:57:30 · 152 阅读 · 0 评论 -
HashMap和HaseTable的区别
1.线程安全:HashMap非安全,HaseTable安全;2.性能:因为安全性的问题,所以Hasemap比HaseTable性能高一点,但是现在一般都不用HaseTable;3.对null Key 和 null Valse的支持:HaahMap中可以存一个null键,键可以存多个对应的null值,但HaseTable中如果出现一个null,就会抛出nullPointerException;...原创 2021-10-14 17:06:37 · 94 阅读 · 0 评论 -
super和this
1.super不能和this一起用;2.super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类;3.this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针;4.super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句);5.this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。...原创 2021-10-13 14:27:49 · 40 阅读 · 0 评论 -
response常用方法
–getRequestURL方法返回客户端发出请求时的完整URL。–getRequestURI方法返回请求行中的资源名。–getQueryString 方法返回请求行中的参数。–getRemoteAddr方法返回发出请求的客户机的IP地址–getRemoteHost方法返回发出请求的客户机的完整主机名–getRemotePort方法返回客户机所使用的网络端口号–getLocalAddr方法返回WEB服务器的IP地址。–getLocalName方法返回WEB服务器的主机名–getMethod得原创 2021-10-18 14:24:50 · 634 阅读 · 0 评论 -
json的常用方法
1)JsonConvert.SerializeObject() 将指定的对象序列化为JSON字符串。 (后台打包回来)2)JsonConvert.DeserializeObject() 将JSON字符串反序列化为指定的.NET类型 (后台解析,JSON字符串为某种集合类型)3) JSON.parse() 将JSON字符串转为一个对象。 (前台转换)4) JSON.stringify() ...原创 2021-10-11 23:05:29 · 620 阅读 · 0 评论 -
类与对象
1.类是对象的抽象,对象是类的实例。2.类是对具有相同属性和行为的一组对象的抽象与统一描述,是用户自定义的数据类型。3.类的定义包括行为和属性两个部分。(属性以数据表示,行为通过函数实现。)...原创 2021-09-19 16:45:27 · 361 阅读 · 0 评论 -
方法的重写与重载
1.方法的重载: 方法名相同,而方法的参数数量不同或数量相同而类型和次序不同。2.方法的重写: 方法的重写,不能发生在同类中,只能发生在子类中。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数,则新方法将覆盖原有的方法。3.重写与重载的区别: 重载实现于一个类中;重写实现于子类中。...原创 2021-09-18 15:44:53 · 1144 阅读 · 0 评论