自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《Spring5.x源码解析》之spring项目源码构建

导语: 众所周知,spring是构建Java企业级项目的基础框架。最典型的是通过它的ioc容器,我们可以巧妙的利用组合的方式实现代码的高内聚,低耦合。除此之外,spring还提供了一站式的解决方案(spring全家桶),如web模块的springMVC,微服务架构的springCloud等等。如此可见,spring的重要性不亚于如今使用的任何一种框架。在面试过程中,也经常提到spring这个框架的知识。或许我们不需要再重复的制造spring这个轮子,但是了解明白其内部的设计原理与思想,对...

2020-07-02 09:51:17 420

原创 使用Wireshark抓取Mqtt 协议包

最近博主在研究Mqtt协议,遂使用wireshark抓取。因为平时比较少用wireshark,踩了几个坑,给大家分享分享!踩坑1: 其他博客说的要下载插件!现在是不需要下载插件了,新版的wireshark已经可以支持mqtt协议。但是要配置mqtt的端口,在wireshark中的编辑->首选项->协议中,找到mqtt的端口设置,修改成你所需的端口。踩坑2: 即使配了mqtt协议还是抓不到包。博主在无意间再次打开wireshar的主界面,才惊奇发现...

2020-05-25 16:14:35 7378 2

原创 4PX面经

楼主面试Java工程师,一面。把问题总结下1.Oauth2.0的4种模式2.设计模式-策略模式3.谈谈Mysql行锁4.对微服务(SpringCloud)的理解5.面对高并发的网站,每个用户都存在积分,如何对积分进行实时排序。6.谈谈volatile关键字解决了什么问题7.谈谈ConcurrentHashMap8.谈谈分布式事务9.实现多线程有哪些方式最后反问...

2020-04-02 12:15:20 394 2

原创 window右键重启资源管理器的问题

楼主最近遇到了一个棘手的问题,就是在桌面右键会重启资源管理器,一开始没去管它,最后越来越不爽,现在成功解决了这个问题。解决步骤:1 启动window日志事件查看器,看看是什么原因造成的2 很明显是foxit phantomPDF造成的,卸载他!!!...

2019-09-28 15:22:25 1105

原创 CETV笔试题总结

线程的六个状态初始 运行 阻塞 等待 超时等待 终止矩阵的深度优先遍历图,就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为边)组成的。例如:上图是由五个顶点(编号为1、2、3、4、5)和五条边(1-2、1-3、1-5、2-4、3-5)组成。现在我们从1号顶点开始遍历这个图(遍历指的是把每一个顶点都访问一次)。使用深度优先搜索来遍历这个图我们将得到以下结...

2019-08-20 22:23:08 679

原创 关于Map的遍历问题

遍历KeySet<String> set = map.keySet(); Iterator<String> iterator = set.iterator(); while(iterator.hasNext()){ String key = iterator.next(); }遍历整个图的属性...

2019-08-20 21:18:40 242

原创 CETV笔试题(一)

/** * 给定一个人物分数表,求排序为 * map.put("小明",2); * map.put("小红",5); * map.put("小军",1); * map.put("小林",4); * map.put("小狗",2); * @param userScore * @...

2019-08-20 21:08:59 831

原创 健康160面试总结

今天博主有幸被健康160面试了,面试了50分钟,感觉还是有很多问题没答上来,现在做下总结1.jvm内存如何查看2.查看线程运行结果 (实现Callable接口)3.设计模式-装饰者模式,观察者模式4.数据库mysql - 存储引擎,数据库的锁,数据库的事务级别,索引类型5.zookeeper的rpc框架6.http协议7.hashmap1.8底层源码8.redis...

2019-08-14 18:19:52 1240 9

原创 Java查看内存使用情况

1.使用Runtime的对象来查看弊端:无法动态查看2.使用JDK bin目录下的命令查看动态查看1) jmap使用方法:Usage: jmap [option] <pid> (to connect to running process) jmap [option] <executable <core&...

2019-08-10 11:59:44 12737

原创 树的前中后遍历(Java版本)

前序遍历 /** * 先序遍历 */ public void preOrder(TreeNode treeNode){ System.out.print(treeNode.val+" "); //输出根节点 if (treeNode.left!=null){ preOrder(treeNode...

2019-08-06 22:05:31 160

原创 树的创建

树的创建使用广度遍历创建树/** * 层次遍历构造 * 创建一颗二叉树 * @param nums * @return */ public TreeNode createTree(Object[] nums){ //判空 if (nums==null || nums[0] ==null){ ...

2019-08-06 22:02:25 393

原创 八大排序算法之一:简单选择排序

简单选择排序基本思想选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,...

2019-08-03 00:11:21 388

原创 八大排序算法之一:希尔排序

希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录...

2019-08-02 23:10:06 345

原创 八大排序算法之一:直接排序

直接排序一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 将新元素插入到该位置后 重复步骤2~5代码public int[] directSo...

2019-08-02 22:08:53 2892

原创 复习贴:Java基础笔记 -9

1.java的拆箱和装箱就是int->integer / integer->int2.在类中的构造方法调用该类其他的构造方法this(x)3.java的基础类型转换规则低级的向高级转换 是隐私类型自动转换高级向低级必须强制类型转换基础类型计算时,默认转换成int类型计算,倘若将用一个比int低级的基础类型来引用,则必须进行强制转换4.HashT...

2019-08-02 21:22:28 156

原创 JVM参数

JVM参数类型1.标配参数-version-help-showversion2.X参数-Xint 解释执行-Xcomp 第一次使用就编程成本地代码-Xmixed 混合模式3.XX参数1)Boolean类型公式: -XX:+或者-某个属性值+代表开启,-代表关闭使用jinfo 查看参数是否开启 ...

2019-08-01 17:03:58 292

原创 JVM垃圾确认与GC Roots

1.如何确定垃圾?引用计数法根搜索路径法(√,java使用)2.根搜索路径法复制法标记清除法标记压缩法这3种垃圾回收方法都是要进行根搜索3.什么是根搜索路径法所有的对象必须是以GCRoots为起点,形成一条对象链,如obj8,obj9,obj10就会被垃圾回收4.什么对象可以作为GCRoots虚拟机栈中引用的对象方法区中类静态属性引用的对象方...

2019-07-31 17:52:06 322

原创 ​​​​JVM架构

1.JVM架构 Java stack(Java栈):先进后出线程私有,存放8种基本变量,对象引用变量,实例方法 -> 存放在函数的栈内存,线程结束时,便失效本地方法栈(Native Method Stack)线程私有,存放标记为native的方法,只有签名,没有实现体,由...

2019-07-30 17:56:23 124

原创 JVM类加载器学习笔记

JVM类加载器Bootrap 启动类加载器,由C++编写,主要负责加载一些核心类库,主要是位于<JAVA_HOME>/lib/rt.jar中 Extension 拓展类加载器,主要加载JAVA中的一些拓展类,位于<JAVA_HOME>/lib/ext中 System ClassLoader系统类加载器, 主要用于加载CLASSPATH路径下我们自己写的类,是...

2019-07-30 16:50:34 171

原创 死锁学习笔记

1.什么是死锁所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。2.产生原因a. 竞争资源系统中的资源可以分为两类:1. 可剥夺资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺,CPU和主存均属于可剥夺性资源;2. 另一类资源是不可剥夺资源,当系统把这类资源分配给某进程后,再不能强行...

2019-07-28 23:02:14 193

原创 线程池学习笔记

线程池的3个种类1.FixedThreadPool(int nThreads) 线程池中固定的nThreads个线程数2.SingleThreadExecutor() 线程池中只有1个线程3.CachedThreadPool() 最大的线程数为Integer.MAX_VALUE共同点底层都实现了TreadPoolExecutor()public ThreadPoo...

2019-07-28 21:34:51 242

原创 Callable接口的使用

是什么1.Callable接口是一个带有返回值的线程接口 怎么用2.Thread类没有带Callable接口的构造方法使用FutureTask<T> ,该类是Runnable的子类,同时构造方法的参数又是Callable,根据java面向接口编程的机制,Runnable子接口能够被传入Thre...

2019-07-25 21:21:29 712

原创 笔记:阻塞队列学习

阻塞队列:阻塞队列不同于普通队列,阻塞队列在于当队列为空时,从列表中获取元素会被阻塞 当队列为满时,从列表中添加元素会被阻塞 具体实现:...

2019-07-12 12:10:54 196

原创 java锁机制

1.读(共享)写(独占)锁JUC提供了一个读写锁,ReentrantReadWriteLock使用该锁,意味着:读时各线程可以共享资源类,写时加锁,并且在写时,不允许读操作2.自旋锁典型案例是CAS,通过循环的方式,不断尝试去拿锁3.重入锁(递归锁)意味着在递归方法中,拿到外部函数的锁,即拿到内部函数的锁4.公平锁与非公平锁公平锁:按请求顺序来执行,先到先得非公...

2019-07-12 12:10:41 187

原创 线程间的通信

tip:线程通信中,使用while判断,如果使用if,可能会出现中断和假唤醒,使用while能让被唤醒的线程再进行判断,看看时候能继续运行,当然,如果只用两个线程,便不会出现错误生产者和消费者: 控制线程的执行顺序,可以使用Lock&Condition&标志属性来控制Synchronize与Lock的区别 synchro...

2019-07-12 12:09:14 125

原创 实践:CountDownLatch&CyclicBarrier&Semaphore

CountDownLatch可以保证某个线程在最后执行类似于火箭发射,做递减枚举类:可以想象成一个小型数据库表名:枚举类名行名:枚举量字段:成员变量使用枚举类的好处:可以在枚举类中定义一些默认的值,当需要修改对应值时,直接修改枚举类的值,而不用改动其他代码,做到低耦合,高内聚CyclicBarrier可以保证某个线程在最后执行类似于收集七龙珠,做递增S...

2019-07-09 23:27:16 145

原创 集合类线程不安全

主要在add,remove时报: java.util.ConcurrentModificationException(并发修改异常)为什么会出现这个异常:比如当A线程在添加数据的时候,B线程突然进来,把A线程要添加数据的位置,增加了自己的数据,紧接着A线程重新执行,再次修改了刚刚的数据,把B线程的数据,修改成自己的数据,这个会导致数组内有空值或者抛出异常解决办法:使用Vector...

2019-07-09 18:24:39 364

原创 笔记:CAS学习

CAS:CompareAndSwap(比较并交换) 他是一条CPU原语,原语的执行是连续的,不允许被中断 调用的Unsafe.class 下的原生方法 该方法传入对象,内存偏移量与增加值 通过对象与内存偏移量得到期望值,因为是Volatile修饰,所以如果有其他线程修改,那么也是能读取主内存的值 weakCompareAndSetInt (...

2019-07-03 21:47:57 159

原创 笔记:JUC学习

JUC -> Java.util.currentvolatile: 轻量级的同步机制保证可见性 不保证原子性 禁止指令重排序JMM(JAVA Memory Model) :Java内存模型(抽象规范)可见性:当某一个线程从主内容读取变量到自己的工作内存,在本地自己的工内存修改值后刷新回主内存,其他本地内存拥有该变量的值会被强制重新从主内存读取变量值 原子性:操作要么同...

2019-07-03 19:47:02 195

原创 复习贴:Java基础笔记 -7

1.&& 为前一个条件为false则不再判断下一个条件2.程序员无法明确强制垃圾回收期运行,system.gc(),提醒程序员希望进行一次垃圾回收3.重构,方法名相同,参数类型,参数数量,参数次序不同4.字符串通过new Stirng("","GBK")解码GBK编码的字符串getBytes("UTF-8")得到UTF8编码的字节数组5.java虚拟机栈描述...

2019-06-30 12:05:36 120

原创 复习贴:Java基础笔记 -6

1.内存泄露是只一个不再被使用的对象或者变量还在内存占有存储空间。内存泄露(Memory Leak)是指一个不再被使用的对象或者变量还在内存中占有存储空间。在C/C++语言中,内存泄露出现在开发人员忘记释放已分配的内存就会造成内存泄露。在java语言中引入垃圾回收机制,有GC负责进行回收不再使用的对象,释放内存。但是还是会存在内存泄露的问题。 内存泄露主要有两种情况:1.在堆中申请的空间没有释...

2019-06-29 21:43:50 161

原创 复习贴:Java基础笔记 -5

1.Thread.sleep() 会占着部分cpu资源wait() 不会占用资源,但是需要用 notify() 或者 notifyAll()唤醒2.List list = new ArrayList(); 这是面向接口编程面向接口编程的好处: 1. 便于程序规范化设计 ...

2019-06-22 17:12:22 150

原创 复习贴:Java基础笔记 -4

1.Byte的默认值为null2.二维数组:int a[][] ={{1,2},{3,4},{5,6}};可以想象成 0 1 0 1,2 1 3,4 2 5,63.java异常分为编译时异常和运行时异常编译时异常需要手动try catch...

2019-06-22 11:52:12 109

原创 复习贴:Java基础笔记 -3 -- Jvm -2

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。1.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的(虚拟机栈)栈内存中分配。当在一段代码块中定义一个变量时,java就在(虚拟机栈)栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由j...

2019-06-22 10:10:25 133

原创 复习贴:Java基础笔记 -3 -- Jvm

1.Jvm将内存分为虚拟机堆,栈,方法区,本地方法栈,程序计数器堆分为新生代和老年代方法区永久代-Xmx 代表最大堆 -Xms 代表最小堆 -Xmn 代表新生代--XXSurvivorRatio=3,代表Eden:Survivor=3HotSpot JVM把年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1,为啥默认会是这个比例...

2019-06-21 21:14:06 253

原创 复习贴:Java基础笔记 -2

1.J2SDK简称JDK2.applet是Java小应用程序,可随网页下载到客户端,由浏览器解释 Appletviewer是运行applet,applet不用main方法,继承applet类即可3. native(原生的),代表的是Java原生的方法,是调用C程序执行,效率高(多出现在System类中)4.replaceAll()第一个参数是正则表达式5.switch中 ...

2019-06-21 21:13:22 124

原创 复习贴:Java基础笔记 -1

1.判断Float在后面要加f。如果是小数,需要加f,不是小数,默认往下转换不会报错。但是double不能转换成float,从上往下转,为强转类型2.对象是存在栈中,引用的地址存在堆中3.栈就是先进先出的桶,堆就是二叉树4.int 无法转为封装类型Double 如:Double d = 3;会报错5.join()是把指定的线程加入到当前线程中,可以合并为顺序执行的线程6...

2019-06-21 19:46:20 112

原创 复习贴:Java集合包详解

博主好久没写博客了,正当最近要找暑假实习,要把之前学过的Java基础拿出来好好复习一下。刚刚看牛客网,看到一道有关集合的题目,现在把学习到的Java集合只是总结下来。1)我们看一下这张图 首先在最顶端就是两个接口类,分别是Collection和Map解释:Collection就是集合的意思,他存放的就是一个一个...

2019-06-20 16:55:25 218

原创 浅入Hadoop开发,eclipse连接hadoop,并运行MapReduce程序

楼主最近在初学hadoop,遇到了很多问题,几乎用了几天去解决bug,终于在今天解决完毕总得来说 归结有两个问题第一是使用 hadoop-eclipse-plugin-2.6.4 来连接hadoop 的 hdfs文件系统第二是在eclipse运行MapReduce 程序,(不是打成jar 再传到服务器上交给hadoop运行)具体步骤,各位看客可看网上的其他文章,写得都非常优秀,在此...

2018-12-11 21:35:05 802

原创 关于网站前端后端,前台后台的问题?

不知道有多少朋友跟我一样误解了多年,前端就是前台,后端就是后台其实不是的!!前端指的是:那些写JavaScript,html,css 的人,当然了,这包括框架结构的 jquery,bootstrap等等后端指的是:将数据传送给用户,简而言之就是增删改查,但其中的设计和逻辑结构就是区分大神和菜鸡的标准了前台呢,指的是用户观看的内容,例如虎扑中,用户观看各种帖子,比赛新闻等等后台呢...

2018-10-25 22:29:25 1493

空空如也

空空如也

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

TA关注的人

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