背景 这是在AVL树计算高度时遇到的问题。为了方便大家看到问题的本质,这里使用一个单链表复现问题。...因此,前一个的深度等于后一个深度加一,所以undefined或null的深度应该是-1(-1加1等于0,这样定义的话,使最后一个节点的计算更方便而已)。...depth || -1 } 其实问题就出在这里,文末再说明为什么有问题。 插入 我们要实时更新每一个结点的深度,那就必然是在节点改变时更新(插入或者删除时)。...修改 我们用三目运算符代替原先的或运算符: function depth(node) { return node ?...node.depth : -1 } 或者说用双问号运算符,它的用法是a ??
大家好,又见面了,我是你们的朋友全栈君。...a=a^b; b=a^b; a=a^b; System.out.println("a="+a+",b="+b); } 第一种:用真实值计算 ^是异或运算符...,异或的规则是转换成二进制比较,相同为0,不同为1....一个数a与另一个数b异或的结果等于a^b,用结果( a^b)异或a,就会得到b; 上面的结果,我们用代码来验证。代码( a=a^b; b=a^b; a=a^b;)可以转换成二进制计算。...相同数异或等于0,任何数异或0等于本身) 第一步没变化,直接代入后面的代码进行计算。 第二步中b=a^b的 a^b转化为 a^b ^b ,其中让b^b等于0, a^0等于a。
大家好,又见面了,我是你们的朋友全栈君。 Java-异或运算 异或运算法则 异或的运算方法是一个二进制运算: 例图: 总结 例题1 例题2:136....异或的运算方法是一个二进制运算: 1^1=0 0^0=0 1^0=1 0^1=1 两者相等为0,不等为1. 例图: 总结 1、异或是一个数学运算符。应用于逻辑运算。...2、真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值相异结果为真。...3、n^0=n n^n=0,即任何数与0进行异或,为它本身,两个相同的数进行异或运算,会得到0。...所以,我们对于上边的解题办法就有了: 首先对1到1000,这1000个数进行异或运算,然后再把上边的1001个数进行异或运算,最后,再对这两个结果进行异或运算,就会得到唯一的那个n。
之前慢是因为服务器渣、数据库查询的时候文章有个字段比较大查询慢,后端请求太多,数据库查询太多。这些问题现在好点了(不敢说很好了,感觉还能优化) 还有些问题是前端的优化,那么前端网页怎么优化呢。...首先可以在这网站跑一下自己网站,看看那方面问题,这网站给的东西还是蛮全的。...GTmetrix 图片,我首页加载慢很大一个问题就是图片,给图片加了个预加载显示,还有就是首页的文章封面图全是css设置宽高(唉,太傻了),上传的时候没处理,导致首页那么一张小图片可能是1920*1080...之前还没仔细想这问题,今天用gtmetrix才发现原来这么影响速度的。 然后就是把图片用画图工具全改成了指定宽高,以后上传的时候先把图片改好再上传就好了,这样改完瞬间快了一点~。 但是还没完。。...啥的都是影响速度的重要原因。 然后还有改就是缓存了,js、css太多图片太多,浏览器缓存还是需要的(??)。 最后就是网站压缩和使用CDN 了。
2.或运算符 或运算符用符号“|”表示,其运算规律如下: 两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。...+(~a)); } } 4.异或运算符 异或运算符是用符号“^”表示的,其运算规律是: 两个操作数的位中,相同则结果为0,不同则结果为1。...Java中的运算符(操作符) 程序的基本功能是处理数据,任何编程语言都有自己的运算符。因为有了运算符,程序员才写出表达式,实现各种运算操作,实现各种逻辑要求。 ...为实现逻辑和运算要求,编程语言设置了各种不同的运算符,且有优先级顺序,所以有的初学者使用复杂表达式的时候搞不清楚。这里详细介绍一下Java中的运算符。 ...数字精度的问题,我们在这里不再讨论。下图中展示了运算过程中,数据自动向上造型的原则。 ?
于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记。 首先来看下面三组表达式,看起来他们都能实现交换两个变量的值。...过了很长时间之后,在意个偶然的机会中,我在一个关于Java谜题的手册中看到了这个问题,原来这还是Java比较经典的谜题之一了。 原来,事情是这样的。...但是有一点可以肯定:它在Java中肯定是不能正确运行的。 Java语言规范描述到:操作符的操作数是从左向右求值的。...为了求表达式 x ^= expr的值,x的值是在计算expr之前被提取的,并且这两个值的异或结果被赋给变量x。...:存储最初的x值到y中 x = tmp1 ^ y ; // 第一个赋值:存储0到x中 从上面的代码可以看出,其实a之所以会为0,是因为a^a造成的,我们知道,两个相同的值异或其值为0.
特殊符号用 \ 隔开 NOTICE: KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 key ,你最好还是用 Redis 的集合结构(set)...因为Keys会引发Redis锁,并且增加Redis的CPU占用,情况是很恶劣的 实际应用中有时候会出现需要遍历redis中的所有键值的需求,比如清理没用的键等等。...但是keys这个命令性能真的很差,redis官方文档是这么说的: Warning: consider KEYS as a command that should only be used in production...由于执行keys命令,redis会锁定,如果数据庞大的话可能需要几秒或更长,对于生产服务器上锁定几秒这绝对是灾难了 如果有这种需求的话可以自己对键值做索引,比如把各种键值存到不同的set里面,分类建立索引...,这样就可以很快的得到数据,但是这样也存在一个明显的缺点,就是浪费宝贵的空间,要知道这可是内存空间啊,所以还是要合理考虑,当然也可以想办法,比如对于有规律的键值,可以存储他们的始末值等等。
https://blog.csdn.net/sinat_35512245/article/details/53767724 先来看一道面试题: java中关于继承的描述正确的是() A、一个子类只能继承一个父类...B、子类可以继承父类的构造方法 C、继承具有传递性 D、父类一般具有通用性,子类更具体 正确答案: A C D ---- 子类不可以继承父类的构造方法,只可以调用父类的构造方法。...子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。...一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。...因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。 PS:方法没有继承一说,只有重载和重写
关于 JVM JDK 和 JRE 最详细通俗的解答 JVM Java虚拟机(JVM)是运行 Java 字节码的虚拟机。...Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。...某些情况下,有些人提到在使用OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到Oracle JDK就可以解决问题; 在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能...在 Java 应用程序中,这个主类是指包含 main()方法的类。而在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。...Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。
2019-5-8 今天由于断电导致电脑异常关机,就出现了开机后屏幕是黑的,只显示鼠标,然后会有警告:explorer.exe目录或文件已损坏。...进入到PE界面后,点击菜单-运行-输入cmd-输入chkdsk c: /f (中间的空格),这一步是让电脑自己去检查磁盘的问题,还是比较快的,中间慢一点不要急; 3....已经不见了, 将提前下载好的相应系统的explorer.exe复制到该目录下,然后双击它运行,惊喜就在眼前。...针对网上各种教程,作以下补充: 1.想直接删除explorer.exe,这是不可能的,必须进入到PE中; 2.直接在原系统中运行chkdsk c: /f也是不行的,因为C盘已经被使用,会提示你重新启动时会检查之类的...,并没用; 3.explorer.exe修复器以及其它的修复并没有用。
大家好,又见面了,我是你们的朋友全栈君。 异或(XOR)运算符 当两个boolean类型的变量,locked ^ deleted,如果locked与deleted是不同的,返回true。...如果两个操作数是相同的,则返回false。 因此,当我们需要同时检查两个不成立的条件时,可以使用异或运算符号。...在Java中使用 接下来让我看一下Java中的异或操作,当然我们可以使用 && 和 || 运算符,虽然这看起来很啰嗦。...这段代码是很常见的,并没有什么问题,只是有点长而且看起来不是很直观。这个时候我们就可以考虑使用异或运算符,即比较二进制中两个值匹配位以返回结果。...代码如下: 结论 通过上面的例子我们了解了异或运算符。我们看到,它提供了一种更简介的方法。
即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-...任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。...说明 ^ 运算符查看两个表达式的二进制表示法的值,并执行按位异或。...只能用于整数 下面这个程序用到了“按位异或”运算符: class E { public static void main(String args[ ]) { char a1=’十’ , a2=’...如果两个数相应的位上一样,结果就是0,不一样就是1 所以111^101=010 那加密的过程就是逐个字符跟那个secret字符异或运算.
我们要知道,treeview在新增或删除treeNode的时候会进行重绘,这也就是为什么大量数据的时候,treeview很卡、很慢的原因, 那么我们这样 treeview1.BeginUpdate();...//这里进行添加节点,这样的话 就不会每次添加节点都进行重绘 //另外不要展开太多的节点,否则重绘的时候一样会卡 treeview1.EndUpdate();
a += b 相当于 a = a + b 存在赋值,会改变变量的引用,但列表的 += 比较特殊 # num_list列表的 += 操作实质是调用了列表的extend()方法,所以引用不会改变 num_list...+= num_list 相当于 num_list.extend(num_list) # num_list的引用发生变化 num_list = num_list + num_list
大家好,又见面了,我是你们的朋友全栈君。
背景:这两天搞了一下java的跨系统远程调用,遇到了几个问题,其中最让我头疼的就是下面那个,然而最后也解决了,故写下来总结一下 Neither the JAVA_HOME nor the JRE_HOME...,比如利用java运行远程服务器的脚本出现not permission>学过编程的人肯定都知道这是没有权限,给它个权限就好了,即 chmod 777 /data/xxx(即路径)....[swppnhaxjc.png] 然后贴上java连接的代码 import ch.ethz.ssh2.ChannelCondition; import ch.ethz.ssh2.Connection;.../startup.sh 在调用java -jar 进行启动springboot项目的时候也发现了此类问题,尽管加上export JAVA_HOME=xxxx也没什么用, 在这里加入下面的命令完美解决springboot...远程启动的问题: **source /etc/profile;nohup java -jar /mnt/test.jar & **
ABA本质是并发情况下使用cas修改数据,在都成功的情况下丢失一次修该信息,比如 A-C-D,A-B-C ABA是否对程序造成影响是否需要解决?...1.如果只是单纯的数值数据,无业务关联逻辑,没有影响,比如Lock锁的实现就不考虑这个问题,因此如果只是单纯的技术或者统计请忽略aba问题 2.如果数据是有业务含义的就需要处理,尤其是资金问题 java...里面的解决办法 1.操作同一个对象的时候,每次都通过new新对象进行包装(其实变相避免了两个A的出现),如下 public class ConcurrentStack { AtomicReference...有时候,我们并不关心引用变量更改了几次,只是单纯的关心是否更改过,所以就有了AtomicMarkableReference。...AtomicMarkableReference的唯一区别就是不再用int标识引用,而是使用boolean变量——表示引用变量是否被更改过。
书上摘抄的一段话,非常有用 表示T应该是绑定类型的子类型(subType) T和绑定类型可以是类,也可以是接口。...选择关键字extands的原因是更接近子类的概念,并且java的设计者也不打算在语言中添加一个新的关键字。...这里的泛型用中extends 的关键字的意思,其实是在给泛型设置限定(bound)的时候, 让extends = extends or implements.
摘要:关于java变量在工作内存和主存中的可见性问题 正文: package com.test;import java.util.concurrent.TimeUnit; public class...问题分析 Q1:为什么注释代码后程序不会终止?...这个是我们大多数人想到的,但其实JVM针对现在的硬件水平已经做了很大程度的优化,基本上很大程度的保障了工作内存和主内存的及时同步,相当于默认使用了volatile。但只是最大程度!...在CPU资源一直被占用的时候,工作内存与主内存中间的同步,也就是变量的可见性就会不那么及时!后面会验证结论。 Q2:为什么取消注释中的任何一个代码块(1,2,3),程序才会终止?...因为对于大量new Object()操作来说,CPU已经不是主要占时间的操作,真正的耗时应该在内存的分配上(因为CPU的处理速度明显快过内存,不然也不会有CPU的寄存器了),所以CPU空闲后会遵循JVM
前言 今天本来想写的题材没写完,于是就找了一篇我很久之前写的,比较简单的文章给大家看看吧。 前言2 今天来说说Android崩溃中的Java崩溃。...Java 崩溃 简单点说就是在 Java 代码中,出现了未捕获异常,导致程序异常退出 崩溃分析 遇到崩溃其实很正常,而且随着用户量的增加,覆盖到的设备越来越多,可能越来越多的问题和崩溃就会摆在我们面前,...这里总结了一个崩溃三步走: 排个序对于崩溃的问题,我们需要先排个序,优先解决那些重要的问题。比如哪些崩溃影响到用户的正常使用,或者影响到APP的主要功能。特别比如支付,登录这一类的问题。...事实确实如此,能复现的问题,我们都可以通过本地调试来找到问题所在。所以对于线上的崩溃,我们尽量去复现它。...实际问题分析 在了解到崩溃原因后,我们就要去分析具体的问题并解决了。解决的办法只有一个,研读代码,无论是自己写的还是第三方的,亦或者是系统源码,只要把代码读懂,就能找到崩溃源头。
领取专属 10元无门槛券
手把手带您无忧上云