标签 Debug 下的文章 - 酷游博客
首页
关于
友链
Search
1
阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?
45 阅读
2
Java中泛型的理解
40 阅读
3
Java 14 发布了,再也不怕 NullPointerException 了!
38 阅读
4
Java中的可变参数
37 阅读
5
该如何创建字符串,使用" "还是构造函数?
29 阅读
技术
登录
/
注册
找到
22
篇与
Debug
相关的结果
2025-01-22
ssh: connect to host 192.0.0.0 port 22: Connection refused
场景描述: 在远程服务器上向本地scp文件,或者在其他机器上登录自己的电脑。使用ssh命令或者scp命令时提示连接被拒绝。 解决方法(MAC BOOK): 系统偏好设置——>共享——>打开远程登录
技术
# Debug
酷游
1月22日
0
21
0
2025-01-22
Java unsupported major minor version 52.0
Here are the major version of every JRE released so far : Java SE 8 = 52, Java SE 7 = 51, Java SE 6.0 = 50, Java SE 5.0 = 49, JDK 1.4 = 48, JDK 1.3 = 47, JDK 1.2 = 46, JDK 1.1 = 45 You can see that Java 8 has major version 52。 which means if you run javac command from Java 8 installation, it will by default generate a class with major version 52. If you run this class file in JRE 7, you will get “Unsupported major.minor version 52.0”. Same is the case with an applet compiled in JDK 1.8, running in a browser with JRE 1.7 Read more: http://javarevisited.blogspot.com/2015/05/fixing-unsupported-majorminor-version.html#ixzz3uUfe4BbX 翻译一下就是:使用jdk8编译的class文件,使用jre1.7运行的时候就会报该异常。
技术
# Debug
酷游
1月22日
0
19
0
2025-01-22
This ZooKeeper instance is not currently serving requests
背景 Zookeeper集群中有11台机器,突然有一台机器挂掉了。由于在不断报警,我就先把这台机器下掉了。为了保证其稳定性,所以还要扩容一台机器。其实就是要把之前的那台机器替换掉。 在其中一台机器挂掉之前,配置如下(数据都是我编的): server.1=192.168.1.101:2555:3555 server.2=192.168.1.102:2555:3555 server.3=192.168.1.103:2555:3555 server.4=192.168.1.104:2555:3555 server.5=192.168.2.1:2555:3555 server.6=192.168.2.2:2555:3555 server.7=192.168.2.3:2555:3555 server.8=192.168.2.4:2555:3555 server.9=192.168.2.5:2555:3555 server.10=192.168.3.1:2555:3555 server.11=192.168.1.100:2555:3555 其中192.168.2.1机器挂掉了,我要把它换成192.168.122.111。 扩容过程 申请机器 安装JDK 安装Zookeeper 配置Zookeeper 192.168.122.111机器: server.1=192.168.1.101:2555:3555 server.2=192.168.1.102:2555:3555 server.3=192.168.1.103:2555:3555 server.4=192.168.1.104:2555:3555 server.5=192.168.122.111:2555:3555 server.6=192.168.2.2:2555:3555 server.7=192.168.2.3:2555:3555 server.8=192.168.2.4:2555:3555 server.9=192.168.2.5:2555:3555 server.10=192.168.3.1:2555:3555 server.11=192.168.1.100:2555:3555 配置好之后我就尝试着启动。 /home/admin/bin/zookeeperctl start,然后我查看启动情况: $ echo ruok | nc 127.0.0.1 2181 imok $ echo srvr | nc 127.0.0.1 2181 This ZooKeeper instance is not currently serving requests $ echo stat | nc 127.0.0.1 2181 This ZooKeeper instance is not currently serving requests $ echo wchs | nc 127.0.0.1 2181 This ZooKeeper instance is not currently serving requests 网上有几个关于这个问题的解答: 在zookeeper的启动日志里面你会发现这样的日志: Have smaller server identifier, so dropping the connection. 如果真的出现了这个问题, 也没关系, 但是需要先将报出该问题的实例起着,然后按照myid从小到大依次重启zk实例即可. 是的,我们确实碰到了这个问题, 因为我们稍后会将机房3的那个zk实例的myid变为0,并最后加入到11台实例的集群中,最后一直报这个问题.Zookeeper 扩容实战 当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。通常在,只启动第一台zookeeper时会报这个错误。在zookeeper server的日志里,会有类似的日志:Exception causing close of session 0x0 due to java.io.IOException: ZooKeeperServer not runningzookeeper运维 但是,和我的情况都不一样,首先,该集群中并不是只有这一台机器,还有另外十台机器在运行。其次,我觉得也和myid无关。 解决 虽然上面的答案并没有解决我的问题,但是给了我提示,虽然集群中并不是只有这一台机器,但是报这个错误的原因应该是,他认为集群中只有他自己这台机器。那为什么他会这么认为呢?答案就是,Leader的配置中并没有该机器的信息。也就是说在Leader机器的zoo.cfg中配置还是旧的,指向的还是旧的地址。 所以,要想把该机器假如集群,应该把所有的机器的配置文件全部修改,然后重启。 建议操作顺序: 先重启新机器、再重启集群中的follower机器、再重启leader机器 重启时,逐个重启 重启过程中,先stop、再修改配置文件、再start 每个机器重启之后都要查看状态是否OK 当Leader机器被关闭时,首先会进行Leader选举,那么这个过程中就会把刚刚扩容的那台机器加进来了。以后也就可以和Leader通信了。
技术
# Debug
酷游
1月22日
0
19
0
2025-01-22
You can't specify target table 'appinfo' for update in FROM clause
今天在做数据订正的时候,写了一个简单的子查询语句,想要把名字重复的应用删除掉一个,删掉其中id号比较大的那个,具体SQL如下: delete from appinfo where id in (select max(id) from appinfo group by app_name having count(app_name )>1) But,报错了。 失败, 详情: You can’t specify target table ‘appinfo’ for update in FROM clause 原因: MYSQL5.0仍然有的限制,文档中说: In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms: DELETE FROM t WHERE … (SELECT … FROM t …);UPDATE t … WHERE col = (SELECT … FROM t …);{INSERT|REPLACE} INTO t (SELECT … FROM t …); 所以,将SQL语句改成下面的内容,执行成功。 delete from appinfo where id in ( select a.id from ( select max(id) id from appinfo a group by app_name HAVING count(app_name)>1 ) a )
技术
# Debug
酷游
1月22日
0
26
0
2025-01-22
自动拆箱导致空指针异常
写在前面:三目运算符是我们经常在代码中使用的,a= (b==null?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。前段时间遇到(一个由于使用三目运算符导致的问题,其实是因为有三目运算符和自动拆箱同时使用(虽然自动拆箱不是我主动用的)。 一、三目运算符 对于条件表达式b?x:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式从不会既计算x,又计算y。条件运算符是右结合的,也就是说,从右向左分组计算。例如,a?b:c?d:e将按a?b:(c?d:e)执行。 二、自动装箱与自动拆箱 基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。 一般我们要创建一个类的对象实例的时候,我们会这样: Class a = new Class(parameters); 当我们创建一个Integer对象时,却可以这样: Integer i = 100;(注意:和 int i = 100;是有区别的 ) 实际上,执行上面那句代码的时候,系统为我们执行了: Integer i = Integer.valueOf(100); 这里暂且不讨论这个原理是怎么实现的(何时拆箱、何时装箱),也略过普通数据类型和对象类型的区别。我们可以理解为,当我们自己写的代码符合装(拆)箱规范的时候,编译器就会自动帮我们拆(装)箱。那么,这种不被程序员控制的自动拆(装)箱会不会存在什么问题呢? 三、问题回顾 首先,通过你已有的经验看一下下面这段代码。如果你得到的结果和后文分析的结果一致(并且你知道原理),那么请忽略本文。如果不一致,请跟我探索下去。 Map map = new HashMap(); Boolean b = (map!=null ? map.get("test") : false); 以上这段代码,是我们在不注意的情况下有可能经常会写的一类代码(在很多时候我们都爱使用三目运算符)。当然,这段代码是存在问题的,执行该代码,会报NPE. Exception in thread "main" java.lang.NullPointerException 首先可以明确的是,既然报了空指针,那么一定是有些地方调用了一个null的对象的某些方法。在这短短的两行代码中,看上去只有一处方法调用map.get("test"),但是我们也都是知道,map已经事先初始化过了,不会是Null,那么到底是哪里有空指针呢。我们接下来反编译一下该代码。看看我们写的代码在经过编译器处理之后变成了什么样。 反编译后代码如下: HashMap hashmap = new HashMap(); Boolean boolean1 = Boolean.valueOf(hashmap == null ? false : ((Boolean)hashmap.get("test")).booleanValue()); 看完这段反编译之后的代码之后,经过分析我们大概可以知道问题出在哪里。((Boolean)hashmap.get("test")).booleanValue()的执行过程及结果如下: hashmap.get(“test”)->null; (Boolean)null->null; null.booleanValue()->报错 好,问题终于定位到了。那么接下来看看如何解决该问题以及为什么会出现这种问题。 四、原理分析 通过查看反编译之后的代码,我们准确的定位到了问题,分析之后我们可以得出这样的结论:NPE的原因应该是三目运算符和自动拆箱导致了空指针异常。 那么,这段代码为什么会自动拆箱呢?这其实是三目运算符的语法规范。参见jls-15.25,摘要如下: If the second and third operands have the same type (which may be the null type), then that is the type of the conditional expression. If one of the second and third operands is of primitive type T, and the type of the other is the result of applying boxing conversion (§5.1.7) to T, then the type of the conditional expression is T. If one of the second and third operands is of the null type and the type of the other is a reference type, then the type of the conditional expression is that reference type. 简单的来说就是:当第二,第三位操作数分别为基本类型和对象时,其中的对象就会拆箱为基本类型进行操作。 所以,结果就是:由于使用了三目运算符,并且第二、第三位操作数分别是基本类型和对象。所以对对象进行拆箱操作,由于该对象为null,所以在拆箱过程中调用null.booleanValue()的时候就报了NPE。 五、问题解决 如果代码这么写,就不会报错: Map map = new HashMap(); Boolean b = (map!=null ? map.get("test") : Boolean.FALSE); 就是保证了三目运算符的第二第三位操作数都为对象类型。 这和三目运算符有关。
技术
# Debug
酷游
1月22日
0
19
0
1
2
...
5
下一页
易航博客