自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 springboot项目调用阿里云短信接口(包括短信上行)

最近一直在做项目,很久没有写过博客了,最近做的一个项目中遇到了一个业务需要用到短信功能包括了发送短信和短信回复之后要收到回复内容,阿里云短信服务是一个非常好的平台,里面提供了多种短信接口可以供我们使用,但是作为一个菜鸟,我也是第一次使用阿里云的这个短信接口,研究了一些时间在这个过程中也遇到了一些问题,现在我已经解决这些问题,这里我把我遇到的问题总结一些,帮助和我一样需要调用短信接口的同学。因为我做...

2019-05-05 10:46:50 4712 2

原创 Vue实现跨页面传数据(从一个页面选择内容带回原页面)

作为一个后端程序员在公司开发项目难免会遇到一些前端问题,最近公司开发新项目前端不够后端来凑,先说情景。我的业务场景是点击添加是打开弹窗,从弹窗中选择数据一个页面中要展示的内容是从弹窗中选择的,也可以说是从另一个页面带回来的数据。点击添加按钮打开一个弹窗,弹窗中是要添加的数据,选择好数据带回当前页面展示,这个问题对于我一个出入职场的后端小白来说实现起来有些困难。经过查找和寻求帮助最后终于搞定了这个问题,上代码下面是原页面的弹窗开关<DialogHouseQuery //这是一个自定义的弹窗页

2020-12-21 16:38:22 5084

原创 序列化和反序列化优化构想

序列化序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。(该解释来自百度百科)序列化应用场景目前各大互联网公司内部服务调用都采用的RPC架构,采用微服务远程调用为开发带来了极大的便捷。RPC架构的核心就是A服务器通过远程协议调用B服...

2019-08-17 15:51:04 480

原创 原来&与&&是有区别的

&运算符&运算符我们都很熟悉,我们也都知道&运算符有两种,&和&&我们平时大多在用的其实是&&,那么这两个有什么区别呢?现在想起来是不是有些好奇了,下面说一下这两种有什么区别。区别&按位与运算,而&&是逻辑与也有短路与之称。使用&时,当左面条件为false时,右面的条件还是会执行的,例如user...

2019-07-29 17:24:34 327

原创 JVM-对象的内存布局

对象的创建JAVA是一门面向对象的编程语言,我们都知道通过一个关键字new就可以创建一个对象。创建对象的实质就是把一块确定大小的额尔内存从堆中划分出来。对象的内存布局我们知道了创建出一个对象的本质了,那对象在内存中具体是怎么存储的呢?在HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头、实例数据和对齐填充。对象头第一部分用于存储对象自身的运行时数据,如哈希码、GC...

2019-07-16 11:41:52 215

原创 数据结构-JAVA实现快速排序

快速排序快速排序的思想:在一组需要排序的数据中选择一个基准,即在这一组数中选出一个数,然后从这个组数的左和右分别向中间遍历,从左面找到一个比基准数小的,从右面找到一个比基准数大的,交换这两个数的位置,即比基准数大的放到基准数右面,比基准数小的放到基准数右面,当左右遍历相撞时,说明,整个数组,左面没有比基准数大 的了,右面没有比基准数小的了,此时相撞的位置就是基准数的位置,下次,再以基准数为界限,...

2019-07-15 21:32:08 324

原创 JVM-安全点解读

了解虚拟机中的垃圾回收和OopMap数据结构我们根据可达性分析可知,通过GC Roots节点我们可以判断一个对象是否还被引用。但现在有很多应用仅仅是方法区就有数百兆大小,逐个检查引用,必然消耗过多的时间。就连号称不会发生停顿的CMS收集器,枚举根节点时也必须要停顿。在HotSpot虚拟机中,一组称为OopMap的数据结构解决了这个问题,在类加载的完成的时候,HotSpot加吧对象内什么偏移量上...

2019-07-15 20:53:35 644 1

原创 数据结构-JAVA实现归并排序

归并排序归并排序的思想:将要排序的一组数分成单个单个的数,然后采用插入排序使两个两个的数据合并成大小有序的一组一组的数组,然后在将这个一组一组的有序数组再两两合并成一个一个的有序数组,最终合成一个有序数组为止。简单理解:先拆分成单个,然后逐级逐步合并,最后合并为一个有序的数组。如下图每个白框代表一个有序数组。(图片来源:https://www.cnblogs.com/fivestudy/p/...

2019-07-15 19:46:29 186

原创 数据结构-JAVA实现简单选择排序

选择排序选择排序的思想也非常简单,选择排序是对冒泡排序的一种改进排序放法。简单的选择排序与冒泡排序的区别是:冒泡:冒泡排序是从一排数据的第一个数开始和右面的一个数进行比较,左面 比右面大则交换位置,然后第二个数和第三个数进行比较,左面比右面大就交换位置,遍历一遍之后就把最大的移动到了最右面。选择:选择排序相对于冒泡排序来说,宗旨是一样的,遍历一遍选出一个最大或者最小的数,确定他的位置。...

2019-07-13 14:53:26 170

原创 数据结构-JAVA实现插入排序

插入排序插入排序是一种非常简单的排序方法,简单的理解起来就是:给定一串数据,先选取前两个进行比较,哪个数小,哪个数放到前面,然后再取第三个数和前两个分别比较大小,找到正确的位置。一直选取到最后一个数比较完即可。public static void cr(int a[]){ for(int i=1;i<a.length;i++){ for(int j...

2019-07-13 14:38:59 180

原创 数据结构-数组、链表有序无须的时间复杂度分析

数组和链表是我们经常使用的数据结构,我们都知道数组的存储地址是连续的,链表的存储地址是不连续的,这就给我们的使用提供了多种选择。下面简单的分析一下数组和链表分别在有序和无须情况下的时间复杂度。数组1、有序数组的删除:数组的存储地址是连续的,我们删除数组中的某个值,首先我们要找到要删除的值,删除此值后,若此值后面还有其他值,每个值的都要向前移动一位,即索引减去1。分析:在数组为有序的情况下,查...

2019-07-06 22:13:03 3473

原创 linux nginx+tomcat实现简单负载均衡

什么是负载均衡?负载均衡,字面意思其实已经很好理解了就是用来平衡负载的,负载均衡用来解决高并发时的服务器负载过大问题。负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到...

2019-06-18 00:48:00 205

原创 float的精度为什么是7位详解

关于float精度为什7位,相信还有很多人没有想明白,是智商原因或是理解力的不同还是有什么其他原因吗,我觉得都不是,我们只是陷进了自己的想法里出不来而已,我也是想了很久,这里我要用比较直白的话,根据自己的理解来描述一下float的精度为什么是7,如果有说错的地方,请大家直接指出。首先看一下float由二进制转换为十进制从这里可以看出符号位占一位,指数位占8位,数值位占23位。这是规定的所以不...

2019-06-12 21:24:51 11524 6

原创 linux jar 命令的简单使用

我们都知道服务器基本上都是linux系统的,linux系统是开源的,他的安全性,性能和对硬件设备的要求都是windows无法比拟的,而作为程序员的我们写好的系统程序自然要放到服务器上去跑,虽然有些服务器支持可视化操作,但作为程序员最基本的linux部署操作我们还是必须掌握的。linux jar命令的简单使用由于个人对于linux命令的了解有限,如有什么不对之处请谅解,这里我们简单的介绍一下li...

2019-06-12 18:54:16 2268

原创 IntelliJ IDEA怎么自动生成注释

我们在写代码,或者看别人的代码时,有注释和没有注释完全是两个感觉的,有注释可以让人很清晰的明白这个方法或者这个类是用来干什么的,当我们在一个公司里和我们的小组或者团队合作完成项目时,注释上有作者的名字也能很快的定位到是谁负责的哪一块能够及时的找到问题解决问题,这样极大的提高了效率,所以注释是非常重要的。但问题是手写注释有时候很繁琐也并不会觉得提高了效率,所以下面简单介绍一下 我们的idea怎样设...

2019-01-17 17:36:17 5863 3

原创 IntelliJ IDEA怎样导入第三方jar包

我们学习java编程的时候,大多数人都是先接触的应该都是eclipse,但是有一个比eclipse更好用的编译器供我们选择,那就是IDEA,虽然这款编译器相对eclipse更加的灵活,功能更加强大,但是对于习惯了eclipse的我们来说,使用起来还是需要些许时间来适应的,eclipse也许我们已经用的很熟了,但是当使用idea时我们需需要一些第三方的jar包该如何导入呢?图解:打开我们的ide...

2019-01-12 17:42:45 1319

原创 JAVA-对象包装器与自动装箱

我们有时需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。这些类称为包装器。这些包装器类的名很明显:Integer,Long,Float,Double,Short,Byte,Character,Void,Boolean对象包装器是不可变的,一但构造了包装器就不能改变其中的值,对象包装器还是final,因此不能定义他们的子类。例如:我们想定义一个整型数组列表,但是我们不能...

2019-01-11 18:14:55 223

原创 JAVA-为什么equals和hashcode在重写时要保持一致

在java中equals方法是写在Object类中的,这个方法是用来检测一个对象是否等于另一个对象。在Object类中这个方法判断两个对象是否具有相同的引用。java语言规范要求equals方法有以下特性:1.自反性:对于任何非空引用x,x.equals(x)应该返回true。2.对称性:对于任何引用x和y,当且仅当y.equals(x)返回true,x.equals(y)也应该返回true...

2019-01-11 17:22:56 698

原创 数据库-cmd下安装mysql服务

前几天电脑系统变的卡顿了当一个系统配置好一个解压版mysql数据库之后是不可以立即使用的,这时我们的操作系统并没有支持mysql数据库的服务,这个时候就需要我们自己手动安装一下mysql的服务,然后启动它,这样我们就能愉快的使用mysql数据库了。...

2019-01-10 14:44:10 3460

原创 数据结构-用for循环实现一个双向链表(java实现)

用java写一个双向的链表,并用for循环实现节点类public class Node { int data; Node last; Node next; public Node getLast() { return last; } public void setLast(Node last) { this.l...

2019-01-02 21:35:06 620

原创 并发编程-内存模型(JMM)

并发编程中的两个关键问题线程之间如何通信及线程之间如何同步。通信是指线程之间以哪种机制来交换消息,在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。同步是指程序中用于控制不同线程间操作发生相对顺序的机制。java内存模型的抽象结构所有实例域,静态域和数组元素都储存在堆内存中,堆内存在线程之间共享,局部变量方法定义参数和异常处理参数不会在线程之间共享,他们不会有内存可见性问题,...

2018-12-27 17:38:02 213

原创 数据结构-用链表创建一个队列(java实现)

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。(该定义来自百度百科)package text1;public class CircularArryQueue&amp;amp;lt;E&amp;amp;gt; { private Node head; pr...

2018-12-26 21:11:36 320

原创 JAVA-并发编程-volatile解读

volatile的特性理解volatile特性的一个好方法就是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。package text1;public class Threadtest implements Runnable{ int v1 = 0; public synchronized void set(int l) { v1 = l; ...

2018-12-26 21:06:35 275

原创 JAVA-finally子句

当代码抛出一个异常时,就会终止这个方法中剩余代码的处理,并退出这个方法的执行。如果方法获得了一些本地资源。并且只有这个方法自己知道,又如果这些资源在退出方法之前必须被回收,那么就会产生资源回收问题一种解决方案时捕获异常并重新抛出所有异常,但是这种方法比较乏味,这是因为需要在两个地方清除所分配的资源,一个在正常的代码中,一个在异常代码中。java有一种更好的解决方案finally子句下面介绍如...

2018-12-24 20:10:02 714

原创 如何搭建一个ssm框架(简单易懂适合小白借鉴和学习)

本人也是小白一枚,刚刚学习ssm框架,尝试着自己搭建一个属于自己的框架,这个框架虽然简单,却耗费了我饿一天的时间,下面是我搭建的过程,仅供参考。有什么不足之处大家可以指出。ssm定义SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。Sprin...

2018-12-20 17:53:22 3455 3

原创 JAVA-锁的升级与对比

在java SE 1.6中,锁一共有四种状态,级别从低到高分别为

2018-12-19 21:35:21 591

原创 JAVA-怎样创建一个线程

线程的定义现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。创建线程java提供了三种创建线程的方法,这里介绍两种我们经常使用的方法。1.通过实现Runnable接口来创建线程为了实现 Runnable,一个类只需要执行...

2018-12-15 21:36:45 1120

原创 并发编程的挑战

即使是单核处理器也支持多线程执行代码,cpu通过给每个线程分配时间片来实现这个机制。时间片是cpu分给每个线程的时间,时间非常短,cpu通过不停的切换线程执行,让我们感觉到多个线程是同时执行的。多线程一定快嘛?答案是否定的如何减少上下文切换无锁并发编程,多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理...

2018-12-15 21:13:39 214

原创 JAVA-反射

反射的定义能够分析类能力的程序称为反射。反射的用途在运行时分析类的能力在运行时查看对象,例如编写一个toString方法提供所有类使用。实现通用的数组操作代码利用Method对象,这个对象很像C++中的函数指针Class类在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的...

2018-12-15 14:38:39 200

原创 JVM-分配及回收策略

java技术体系中所提倡的自动内存管理最终可以归结为自动地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,前面的博客中已经介绍过了,在这我们讨论一些给对象分配内存的问题。对象内存分配,说白了就是在堆上分配,对象只要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的。...

2018-12-14 16:43:48 341

原创 JVM-垃圾收集算法详解

由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此在这不打算过多的讨论算法的实,只是介绍几种算法的思想及其发展过程。1标记—清除算法...

2018-12-12 11:23:03 309

转载 互联网公司分布式集群架构图入门解析(简单通俗易懂,超详细)

本文转载于https://blog.csdn.net/qq_37856300/article/details/83714182一、小型公司网络架构狗子是某大学计算机专业本科应届毕业生,由于自己的技术不错,再加上互联网产业的巨大利润的驱使,狗子决定走上创业这条路,于是,狗子联合了同学二黑,鸡子,狗蛋等人花费了几个月的时间写出了一套网站,是关于足球资讯的pc端网站加上手机APP客户端。现在产品测试...

2018-12-11 17:58:07 429

原创 JVM-垃圾回收的理解

1534533

2018-12-11 17:44:42 332

原创 JVM-java运行时数据区域详解

java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间 ,有的区域随着虚拟机进程的启动而存在,有些区域则以来用户线程的启动和结束建立和销毁。java虚拟机所管理的内存将会包括以下几个运行时数据区域。(图片来源: https://blog.csdn.net/carson0408/article/details/79608...

2018-12-11 11:32:44 291 1

原创 zookeeper工作原理简单介绍

zookeeper的简介ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKe...

2018-12-04 09:39:37 396

原创 消息队列的理解与使用

消息队列简介“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。(以上介绍来着百度百科)消息队列的简单理解同时接收到大量请求的高并发情况,但维持时间不长,收到请求后先给请求者返回信息,再处理消息队列中的请求。为什么要用到消息队列?消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源...

2018-12-03 23:29:52 370

原创 ip端口和域名的理解

1.当我们把项目部署到自己的服务器上以后,一般可以通过两种形式访问项目,一种是ip+端口号,还有一种是域名访问.ip的理解通俗点说就是IP地址是用于标识出网络上的每一台主机的编号。有这个编号,网络上的其他主机才能在互联网浩若繁星的主机中定位到唯一的一台主机。域名的理解域名,(英语:domain name),是由一串用“点”分隔的字符组成的Internet上某一台计算机或计算机组的名称,用于...

2018-12-03 23:12:26 1977

原创 JAVA-抽象类和接口的区别

首先我们要知道什么情况下我们要使用抽象类,什么情况下我们要使用接口抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。package text1;public abstract class abstracttest { private String name=&quot;aaa&quot;; public String getNam...

2018-11-21 17:30:40 226

原创 .val()和.value的区别

.val()简单来说,.val()用于获取域中的值,例如获取input输入框中输入的值,此时用.val()获取.value&lt;input class="bot_3" type="submit" id="sub_1" value="提交订单" &gt;&lt;/input&gt;由上面可以看出.value获取的是input中的value的值...

2018-11-20 20:29:42 6396

原创 修饰符public private protected的作用及区别

我们都知道,最好将类中的域标记为private,而方法标记为public。任何声明为private的内容对其他类都是不可见的,这对于子类也完全适用2,即子类也不能访问超类的私有域。如果希望子类的方法访问超类的某个域,将这些方法或域声明为protected,这样子类就能访问了。区别1.仅对本类可见——private2.对所有类可见——public3.对本包和所有子类可见——protecte...

2018-11-19 20:47:59 1025

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除