1. 1
  2. 2
  3. 3
最新发布 每页10条   共296条   当前第18页
  • 应该选

    web项目使用WebSocket技术实现html实时打印log日志

    yexindonglai@163.com 2022-03-01 12:19 后端

    2021°

    0

       有时候进行查找错误的时候非要进入到linux系统里面查看服务打印的日志才知道错在哪,这就给排查时间增加了一些时间,所以为了方便,突发奇想,何不自己开发一个可以实时查看日志的接口呢,于是开发出了这么个玩意;项目下载地址:https://download.csdn.net/download/qq_27184497/12311384效果图如下:每次更新日志时,网页上都会打印出来相应的日志内容,代码也很简单先导入pom依赖<dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifac
  • 应该选

    解决maven打包时手动添加的依赖jar包打不进去的情况

    yexindonglai@163.com 2022-03-01 12:18 Maven

    5418°

    0

    这个问题忙了我一天多的时间,因为太棘手了,所以记录下来,防止忘记;问题是这样的,因为项目中用到了自定义的jar包,也就是远程仓库里没有的jar,所以想要引用就必须自己手动添加进去,在idea中运行是没问题的,但是打包到测试环境后发现经常报错java.lang.NoClassDefFoundError  和  ClassNotFoundException异常,经过一查找才发现是因为打包的时候依赖jar包没打进去;一开始是在项目中导入了本地的jar包。发现没用网上找到问题说是因为scope指定了system域是系统范围使用的,在打包时不会将这个空间的包打进lib目录下;然后也在项目中手动添加了这个
  • 应该选

    转发和重定向的区别

    yexindonglai@163.com 2022-03-01 12:14 Java

    737°

    0

      转发  转发是在服务器进行操作的,在前端客户端页面是看不到什么变化的,通俗理解:客户端跟服务端要资源,但是服务端没有这个资源,那么服务器端就会去请求别的接口来获取客户机想要的资源,然后在返回给客户端;转发内部原理如下:重定向  重定向可以理解为重新定向资源,当服务器进行转发时,客户端会进行2次请求,资源地址也会跟着变化,通俗点理解:客户机想服务器请求资源,但是服务器没有这个资源,这时候服务器会返回一个302的状态给客户端,并给出重定向的地址,放在响应头的Location中,如图: 重定向底层执行原理如下图: 通过上面的流程,那我们在代码中手动返回302的状态码,并且在响应头加上Locati
  • 应该选

    ArrayList 、 LinkedList、Vector的底层结构以及区别

    yexindonglai@163.com 2022-03-01 12:13 Java

    855°

    0

    ArrayList、LinkedList、Vector的区别如下:数组结构是否线程安全效率初始容量扩容机制-倍数ArrayList动态数组否遍历查找快,插入删除慢10倍数:1.5 比如初始值是10,第一次扩容公式 10*1.5 =15第二次扩容公式 15*1.5 =22扩容计算时去掉结果的小数部分LinkedList双向链表否插入删除快,遍历查找慢双向链表没有初始容量双向链表也没有扩容机制,一直在后面或者前面添加元素就好Vector动态数组是遍历查找快,插入删除慢10倍数 2倍比如初始值是10,第一次扩容公式 10*2=20第二次扩容公式 20*2=40ArrayList  ArrayList
  • 应该选

    二叉树、B树、红黑树 结构

    yexindonglai@163.com 2022-03-01 12:12 后端

    871°

    0

      在数据结构中,树这个概念用的非常多,特别是在Map存储中其实就是一个树的概念,这种结构也叫树结构,跟线性结构不同,线性结构就是链表,就是一条线就可以表示完了,但是树状结构的分支会有无限多,我们本章就是只要理清楚红黑树的概念,但是要想理清楚红黑树就必须得先知道普通的树和B树的结构,理清楚这两个树可以帮助我们更好地理解红黑树,因为红黑树和B树是可以互相转化的! 树树没什么好说的,一个图你们就明白了树是怎么回事了!我们入场生活中的树的根是在下面的,但是在数据结构中,树的根节点一般是在上面的,所以在图片中做了一层转化;我们只需要知道什么是树就可以了;我们工作中用到的思维导图本质上也是树形结构 二叉
  • 应该选

    CAS 自旋锁/无锁机制算法

    yexindonglai@163.com 2022-03-01 12:09 Java

    1152°

    0

        CAS全称叫做Compareandswap(比较和交换),CAS无锁机制是乐观锁的一种,也叫自旋锁,CAS假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则重新再来一次,无限循环地进行对比,直到没有冲突为止; Atomic类就是使用CAS无锁机制实现的类;CAS操作依赖底层硬件的CAS指令,CAS指令有两个步骤:冲突检测和更新操作,但是这两个步骤合起来成为一个原子性操作。CAS指令需要3个操作数:需要更新的变量(V)(主内存)旧的预期值(E)(本地内存)新值(B)CAS指令执行时,首先比较内存位置V(主内存)处的值和E
  • 应该选

    try-with-resource 不调用close()方法也能回收垃圾

    yexindonglai@163.com 2022-03-01 12:09 Java

    749°

    0

     传统的trycatchfinally方式是这样的publicstaticvoidmain(String[]args){FileInputStreamfileInputStream=null;try{//捕获异常fileInputStream=newFileInputStream(newFile("/Users/mac/Documents/合规业务组照片.zip"));byte[]bytes=newbyte[1024];intline=0;while((line=fileInputStream.read(bytes))!=-1){System.out.println(newString(byt
  • 应该选

    HashMap底层原理以及 LinkedHashMap、HashTable 、HashSet 四者区别

    yexindonglai@163.com 2022-03-01 12:08 Java

    833°

    0

      为了搞懂HashMap,作者经常夜不能寐,熬夜刷文章、看源码、撸代码、做测试,终于在今天下午的1点30分55秒搞HashMap究竟是何方神圣,我想,这也许就是代码的魅力吧,为了这玩意我可真是煞费苦心,虽然辛苦,但是也很开心,又研究透了一样东西,这种快乐简直让人流连忘返,不多说,开始表演!HashMap在各JDK版本的区别  在JDK1.7以前,HashMap是用【数组 +单向链表】实现的,而在JDK1.8是使用【数组+单向链表+红黑树】实现的,本文主要具体讲讲数组+单向链表的实现,有些童鞋会说了:“既然已经使用了红黑树了,为啥不直接讲红黑树结构呢?”,首先,这是好问题,让我们先把掌声给到这
  • 应该选

    java虚拟机内存结构和垃圾回收机制算法详解

    yexindonglai@163.com 2022-03-01 12:06 Java

    779°

    0

      java是目前全球最火的语言,热度也是最高的,相信做开发的你肯定用过,那我就要问问,你仅仅是用过还是了解它的底层机制和执行原理呢?那么今天我们就揭开它神秘的面纱,看看jvm在我们开发的时候帮我们做了哪些事情;说到这里,有个小兄弟要问了:“我会用不就行了吗?了解它干啥呢?难不成我要自己写一个jvm出来?if和for语句我用得可顺手,了解它的底层机制有卵用?”;唉~,这位小兄弟,你先别急啊,首先呢,用只是基础,就像开发一样,增删改查就是一个开发人员的基础,难不成你想一辈子都干增删改查吗?学习这些还不是为了让我们收入蹭蹭往上涨,让我们通往架构师的路越来越顺畅;安安静静地坐下来,让我们开始学习吧!
  • 应该选

    java静态代码块执行顺序

    yexindonglai@163.com 2022-03-01 12:05 Java

    762°

    0

     虽然说不管是静态变量还是静态方法,这些都是java基础的知识了,但我发现还是有很多人不懂静态的原理,静态的属性遵循以下规则:静态元素会在构造方法之前执行静态元素从上到下按顺序执行静态元素不需要初始化即可直接使用; 1、静态元素会在构造方法之前执行,举个例子就知道啦;我们看看下面的代码publicclassMain{static{System.out.println("1:静态代码块");}publicMain(){System.out.println("2:构造函数");}publicstaticvoidmain(String[]args){//初始化Mainmain=newMain();S