-
2020-10-30 10:48:28.386 WARN 23931 --- [pool-5-thread-1] c.o.s.internal.RestStorageService : com.obs.services.internal.ServiceException: Request Error: java.net.UnknownHostException: bc5d5fe30c3f4da0ac355a56add071d5.obs.cn-north-4.myhuaweicloud.com: Temporary failure in name resolution PUT 'http://bc5d5fe30c3f4da0ac355a56add071d5.obs.cn-north-4.myhuaweicloud.com/' on Host 'bc5d5fe30c3f4da0ac355a56add071d5.obs.cn-north-4.myhuaweicloud.com'com.obs.services.internal.ServiceException: Request Error: java.net.UnknownHostException: bc5d5fe30c3f4da0ac355a56add071d5.obs.cn-north-4.myhuaweicloud.com: Temporary failure in name resolutionat com.obs.services.internal.RestStorageService.handleThrowable(RestStorageService.java:274) ~[esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:812) ~[esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.internal.RestStorageService.performRestPut(RestStorageService.java:998) ~[esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.internal.RestStorageService.performRestPut(RestStorageService.java:987) ~[esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.internal.ObsService.createBucketImpl(ObsService.java:1483) ~[esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient.access$200(ObsClient.java:211) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient$1.action(ObsClient.java:758) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient$1.action(ObsClient.java:751) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient.doActionWithResult(ObsClient.java:3929) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient.createBucket(ObsClient.java:750) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient.createBucket(ObsClient.java:738) [esdk-obs-java-3.20.6.1.jar!/:na]at com.obs.services.ObsClient.createBucket(ObsClient.java:708) [esdk-obs-java-3.20.6.1.jar!/:na]at com.pcl.service.obs.OBSFileService.createBucketName(OBSFileService.java:94) [classes!/:0.0.1-SNAPSHOT]at com.pcl.service.obs.OBSFileService.unZipFileToMinio(OBSFileService.java:865) [classes!/:0.0.1-SNAPSHOT]at com.pcl.service.DataSetService$2.run(DataSetService.java:670) [classes!/:0.0.1-SNAPSHOT]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]Caused by: java.net.UnknownHostException: bc5d5fe30c3f4da0ac355a56add071d5.obs.cn-north-4.myhuaweicloud.com: Temporary failure in name resolutionat java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_161]at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_161]at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_161]at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_161]at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_161]at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_161]at okhttp3.Dns$1.lookup(Dns.java:39) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:170) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:136) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:81) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:171) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) ~[okhttp-3.7.0.jar!/:na]at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) ~[okhttp-3.7.0.jar!/:na]at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) ~[okhttp-3.7.0.jar!/:na]at okhttp3.RealCall.execute(RealCall.java:69) ~[okhttp-3.7.0.jar!/:na]at com.obs.services.internal.RestStorageService.performRequest(RestStorageService.java:634) ~[esdk-obs-java-3.20.6.1.jar!/:na]
-
这里中断的意思是:访问cse的时候报“Failed to create SSL connection”2020-09-17 02:17:53.370 | [vert.x-eventloop-thread-11] | ERROR | o.a.s.t.rest.client.http.RestClientInvocation | Failed to send request, local:not connected, remote:/10.31.31.29:20001.io.vertx.core.http.impl.NoStackTraceTimeoutException: The timeout period of 5000ms has been exceeded while executing POST /mgmt/v2/queryUserConfigs for server 10.31.31.29:200012020-09-17 02:17:53.374 | [vert.x-eventloop-thread-8] | ERROR | o.a.s.t.rest.client.http.RestClientInvocation | Failed to send request, local:not connected, remote:/10.31.31.29:20001.javax.net.ssl.SSLHandshakeException: Failed to create SSL connection at io.vertx.core.net.impl.ChannelProvider$1.userEventTriggered(ChannelProvider.java:115) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:344) at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:330) at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:322) at io.netty.handler.ssl.SslUtils.handleHandshakeFailure(SslUtils.java:347) at io.netty.handler.ssl.SslHandler$5.run(SslHandler.java:2004) at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:748)Caused by: javax.net.ssl.SSLException: handshake timed out at io.netty.handler.ssl.SslHandler$5.run(SslHandler.java:2001) ... 9 common frames omittedrun log:2020-09-16 11:07:48.689 | ERROR | [http-nio-10.31.31.13-8080-exec-1408] | 10.31.31.13 | V295217425-3f7b-48f | failed to handle request,exception is:InvocationException: code=408;msg=CommonExceptionData [message=Request Timeout. Details: The timeout period of 5000ms has been exceeded while executing POST /channel/v2/ability/queryAbilityDetail for server 10.31.31.29:20000]2020-09-16 11:07:48.698 | ERROR | [http-nio-10.31.31.13-8080-exec-1412] | 10.31.31.13 | V2f56eee1c-cb57-4ce | failed to handle request,exception is:InvocationException: code=408;msg=CommonExceptionData [message=Request Timeout. Details: The timeout period of 5000ms has been exceeded while executing POST /channel/v2/recommend/newCardList for server 10.31.31.29:20000]
-
首先看到时间复杂度要求就可以确定使用折半查找的思想。由于数组下标是从0开始计数,我们可以将k也定义为从0开始,那么原本题目中的第k小(k从1开始),在我们算法中就表示成第k-1小(k从0开始)。注意每次取mid1和mid2时,都应该考虑有没有越界情况的发生。public class ex_2 {public static void main(String[] args) {int[] arr1 = new int[]{1, 2, 3};int[] arr2 = new int[]{0, 4, 5, 6, 7, 8};System.out.println(findKth(arr1, arr2, 2));}public static int findKth(int[] arr1, int[] arr2, int k) {if (arr1 == null || arr1.length < 1) {return arr2[k - 1];}if (arr2 == null || arr2.length < 1) {return arr1[k - 1];}return findKth(arr1, 0, arr1.length - 1, arr2, 0, arr2.length - 1, k - 1);}public static int findKth(int[] arr1, int l1, int r1, int[] arr2, int l2, int r2, int k) {if (l1 > r1) {return arr2[l2 + k];}if (l2 > r2) {return arr1[l1 + k];}if (k == 0) {return Math.min(arr1[l1], arr2[l2]);}int mid1 = l1 + k / 2 < r1 ? l1 + k / 2 : r1;int mid2 = l2 + k / 2 < r2 ? l2 + k / 2 : r2;if (arr1[mid1] < arr2[mid2]) {return findKth(arr1, mid1 + 1, r1, arr2, l2, r2, k - (k / 2) - 1);} else if (arr1[mid1] > arr2[mid2]) {return findKth(arr1, l1, r1, arr2, mid2 + 1, r2, k - (k / 2) - 1);} else {return arr2[mid2];}}}
-
1、认识frame类a、这是一个窗口类b、常用方法setSize();## 标题//设置大小setVisible();//显示窗口setTitle();//设置标题setResizable();//设置是否能改变窗口大小addWIndowListener //创建窗口监听器package tank;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class mainActivity {public static void main(String[] args) {// TODO Auto-generated method stubFrame f=new Frame(); //调用jar包awt下的Frame窗口类进行实例化f.setVisible(true); //调用显示窗口的方法,设置窗口可见参数为truef.setSize(1000,800); //设置窗口大小,括号内为窗口大小参数,单位为像素f.setResizable(false); //设置是否能改变窗口大小,是为true,否为falsef.setTitle("坦克世界"); //设置标题 f.addWindowListener(new WindowAdapter() {//使用匿名内部类创建窗口监听器@Overridepublic void windowClosing(WindowEvent e) {//被监听者// TODO Auto-generated method stubSystem.exit(0);//系统退出} });}}这样就可以点击自己创建好的窗口的“❌”号关闭这个窗口了。其实还可以重新创建一个class文件命名为tankfram ,使其继承自Frame,在tankframe类中还应该创建一个无参的构造方法在这个无参的构造方法中写入属性设置**package tank;import java.awt.Frame;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class tankfram extends Frame {public tankfram() {setVisible(true); //调用显示窗口的方法,设置窗口可见参数为truesetSize(800,600); //设置窗口大小,括号内为窗口大小参数,单位为像素setResizable(false); //设置是否能改变窗口大小,是为true,否为falsesetTitle("̹坦克世界"); //设置标题 addWindowListener(new WindowAdapter() {//使用匿名内部类创建窗口监听器@Overridepublic void windowClosing(WindowEvent e) {//被监听者// TODO Auto-generated method stubSystem.exit(0);//系统退出}}); }}接着在mainActivity中调用这个无参的构造方法即可2、重写paint方法,使用Graphics画笔工具画一个矩形这个画笔工具其实就是一个Frame类中的方法,我们需要早tankframelei中重写这个方法@Overridepublic void paint(Graphics g) {//Graphics 可以理解为画笔g.fillRect(200, 200, 50, 50);//使用画笔在窗口的横向距离200像素点,纵向距离200200像素点的地方创建一个长50像素宽50像素的矩形}在这个方法中x轴也就是横向是标题栏从左至右依次增大,y轴也就是纵向是标题栏从上往下依次增大3、让我们画出的矩形动起来要让我们画出的矩形动起来一般我们需要设置一个线程,但是考虑到我是一个初学者,我准备使用一个循环来完成它。首先,需要介绍一个监听器,这个监听器是KeyAdapter,这个监听器中有两个方法,一个是keyPressed,这个方法是监听键盘的按下活动的,另一个是keyReleased方法,这个方法是监听键盘抬起活动的class mykeyListener extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent e) { //键盘按下// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) { //键盘抬起// TODO Auto-generated method stub}}这两个方法都是从键盘适配器类KeyAdapter重写的,我们可以在这个两个冲写的方法中写入我们所需要实现的内容。要想让我们画出的图形动起来直接在tankfram类中定义两个变量,让着两个变量替换掉paint放发中的参数,然后在键盘监听这个类中重新定义方块的坐标并宠幸显示方块即可,说到这里系统又一个放是是专门用来完成界面刷新的一个方法那就是repaint()。但是呢,我们又不可能以值收在电脑旁按键盘,这时候我想到了用循环来做这个功能。将mykeyListener中的功能给注释掉,(注意:不要直接删除,后面可能会用到),然后在paint方法中写入 x=+10,接着会带mainAvcivity类中写入一个while死循环,这时编辑器会提示报异常,我们直接将这个异常用throw语句抛出即可,在这个循环中写入更新界面的方repaint()方法,这样我们方块就动起来了public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub tankfram tf=new tankfram();//对tankfram进行实例化while(true) {Thread.sleep(100);tf.repaint();}}public void paint(Graphics g) {//Graphics 可以理解为画笔g.fillRect(x, y, 50, 50);//使用画笔在窗口的横向距离200像素点,纵向距离200像素点的地方创建一个长50像素宽50像素的矩形x+=10;}
-
乐乐老师的问答集锦Q:自己能写代码,但是看不懂别人的代码,如何理解别人的语法?A:首先需要解决的问题是为什么没办法理解别人的语法,是不了解相关技术基础,还是不了解业务逻辑,还是其他人的代码确实写的有点难以理解。针对上面不同的原因,我给出以下建议:一、不理解相关技术,不妨就直接找实现这段代码的同事,请他给你简单brief一下相关技术,往深了学还是要靠你自己。或者是更高效的做法就是在code review或者tech session中请他分享一下有关技术,这样整个知识就在团队内部显式化。二、不了解业务逻辑,不清楚这个逻辑为什么这样做,那就需要去找当时需求的提出人,自己团队内部的产品经理或者业务分析师,或者是写这段代码的人,找他们了解业务上下文,弄清楚这里为什么这样做,这个逻辑解决了什么样的问题,达成了什么样的目的;其他人的代码确实有bad smell,这时候事情就变得有意思起来了,我希望你可以checkout一个新分支,大胆的补齐测试然后对这段代码进行重构,在code review的时候给出自己重构的理由,show一把自己的技术。 Q:如何将知识点搭配起来完成一个比较复杂的项目?A:如果是学了一个知识点,打算在项目中使用的话,一定要保证自己首先能完成一个最基本的项目,从0-1让一个项目先跑起来,然后再去考虑如何将所学的知识点(比如redis,分布式锁,zookeeper,MQ等)去和这个项目进行集成,当然如果是对于这些知识点是否真正工作,还需要自己想清楚集成了之后如何观察和测试。大部分项目都会在官网有demo,如果看不懂英文官网的文档的话,先好好学习英语哟! Q:从简单敲一段代码到项目级的进阶之路怎么走?A:项目是由一段段代码组成的,在我看来如果关注项目级别的事情,那么说明自己选择的是程序员,TL,架构师这条路而不是纯管理岗,当你能完成一个简单的CURD业务逻辑,让一个功能run起来之后,就可以开始关注架构设计方面的知识,了解当前项目痛点,寻找如何通过更好的架构设计,引入新技术来解决。我最近在阅读的《架构整洁之道》,《大型网站技术架构-核心原理与案例分析》,《大型网站系统与Java中间件实践》都是不错的书籍,推荐需要的同学阅读。乐乐老师的四个一内容回顾一份技能图谱(文末自取)由诸多一线大厂开发人员和技术负责人共同整理的Growing技能图谱一条学习线路(文末自取)大佬珍藏,迭代至今的学习线路一个知识点——压力测试压力测试:在软件测试中,压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。一个实战案例——应对双十一百万PV挑战双十一马上就要到了,便宜用户拿了,利润商家收了,剩下的这一大波突如其来的流量留给了我们的开发者,如何在限量秒杀,限时支付,拼团拼购等玩法下维护服务系统的正常运行,成了横亘在乐乐老师和双十一之间必须要攻克的挑战。他们在怎么做呢?——优化性能利用Gatling对加购,结算,支付,退款,订单生成以及限量秒杀,红包卡券等功能进行了详尽的性能测试,生成了服务SLA的同时利用Arthas对热点代码进行监控,结合业务逻辑提出了很多优化方案。例:在架构上:分别在网关层(Nginx,API Gateway),容器层(Tomcat)和服务层进行了限流配置和流量监控,使用了诸如令牌桶,流速控制以及最大连接数控制等方案保证服务稳定性。代码层面:结合业务逻辑减少了锁粒度并适当对锁进行了降级来减少锁争用情况。简单来说就是减少被锁住的代码块,只去对该同步的地方同步。基础设施层面:配置动态扩容规则,并且准备了备用机器以防单点故障,增加备用数据库配置级别,对数据库等服务进行了适当实例增强准备,同时进行了详细的基础设施故障演练,应对突发状况制定响应规则和响应策略。想要更多资源,请持续关注我们的活动……扫码加微信群,仅限200人开始时间10月29日 20:00活动介绍云享MindTalks是由华为云DevCloud团队携手云享专家共同策划进行的系列技术交流活动。各业界大咖纷纷现身群聊,以即时对话形式,来进行最直接的技术交流和思想碰撞。为保证极简极高效,活动仅二十分钟,开始即高潮,结束即群散。针对上一期问卷反馈,这期由张常乐老师,在双十一大促前夕忙于技术支撑的前主播,来和我们进行面对面的分享:在大家节衣缩食养精蓄锐准备买买买的时候,他和他的团队为何忙于Java程序无法自拔?从模特成功转行开发者的技能图谱如何点亮?专家介绍忙于技术支撑的前主播,华东区Tech Lead;拥有5年Java开发经验,现役CSDN博客专家,华为云云享专家,Thoughtworks咨询师。热爱分享的常乐君,还喜欢leetcode打野,是一个凭实力进入周赛前排的模特。活动规则1.扫码加入群聊,仅限200人,手慢者即无。2.未能即时回复问题,由助手收集集中回答。3.微信群聊将于活动结束后三天内原地解散。4.抽奖的奖品为荣耀魔方蓝牙音箱(树莓红)和华为云定制礼品HE2E知识卡牌。
-
迷宫项目实现设计文档项目介绍:一个网格迷宫由n行m列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示)。你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格。任何时候都不能在有障碍物的单元格中,也不能走到迷宫之外。起点为左上角和终点右下角。项目功能:解决迷宫路径查找问题,寻找一条从左上角迷宫入口到右下角迷宫出口的一条有效路径,0代表可走,1代表不能行走,找到请输出最终的迷宫和路径信息,找不到请输出不存在有效路径。项目所用知识点:采用Java面向对象思想,二维数组以及非递归栈进行实现项目实现思路:定义一个迷宫节点类型(MazeNode)的二维数组初始化每个格子中的value值。给二维数组每个格子存放对象。对象的value值只能为0(当前格子可以走)或者1(当前格子不能走)创建围墙,可以有效防止越界问题。根据当前节点周围四个方向格子中的value值,判断当前节点的上下左右四个方向是否可走(0是可走,1不可走)。开始走迷宫。采用栈操作,记录行走的路径,将元素入栈,判断当前栈顶元素的哪个方向可走,将其中一个可走方向进行入栈操作,直到右下角元素停止。栈中保存走过的路径。 注意: 如果遇到走入死胡同问题,此时需要将是栈顶元素并且栈顶元素的四个方向都不能行走,此时将其出栈,选择新方向再次入栈,直到右下角元素停止。项目实现 :Maze类import java.util.Scanner; public class Maze { private MazeNode[][] mazenode; private int row ;//行 private int colum;//列 public Maze(){ } public void innode(){//添加迷宫路径; Scanner scanner=new Scanner(System.in); System.out.println("请输入迷宫行数和列数"); row=scanner.nextInt()+2;//为后面加围墙 colum=scanner.nextInt()+2; System.out.println("请输入迷宫路径:"); mazenode=new MazeNode[row][colum]; build(mazenode);//创建一个row行colum列的mazenode并且把value值都给1 for(int i=1;i<row-1;i++){//为围墙内value赋值; for(int j=1;j<colum-1;j++){ mazenode[i][j].value=scanner.nextInt(); } } } //创建围墙; public void build(MazeNode[][] mazenode){ for(int i=0;i<row;i++){ for(int j=0;j<colum;j++){ mazenode[i][j]=new MazeNode(1,i,j); } } } public void goMaze(){//走迷宫 innode(); MyStack route=new MyStack();//存放路径的盏 if(mazenode[1][1].value==0){//判断入口是否可走; route.push(mazenode[1][1]); }else {System.out.println("迷宫入口路径错误"); } if(mazenode[row-2][colum-2].value!=0){//判断终点是否正确 System.out.println("迷宫终点错误"); } for(int i=1,j=1;;){//起点 i=route.gettop().index1;//赋值栈顶元素的下标一给i j=route.gettop().index2;//赋值栈顶元素的下标二给j if(i==row-2&&j==colum-2){ break; }//抵达终点退出循环 if(mazenode[i][j].right(mazenode,i,j+1)){//判断右边是否可走 if(route.contain(route,mazenode,i,j+1)){//判断右边是否在栈内 mazenode[i][j].changeValue(mazenode,i,j); route.pop(mazenode[i][j]);//如果存在退栈 }else { route.push(mazenode[i][j+1]);//如果不存在入栈的右边 } } else if(i+1<row&&mazenode[i][j].down(mazenode,i+1,j)){ if(route.contain(route,mazenode,i+1,j)){//判断下边是否在栈内 mazenode[i][j].changeValue(mazenode,i,j); route.pop(mazenode[i+1][j]);退栈 }else { route.push(mazenode[i+1][j]); } }else if(i+1<row&&mazenode[i][j].left(mazenode,i,j-1)){ if(route.contain(route,mazenode,i,j-1)){//判断左边是否在栈内 mazenode[i][j].changeValue(mazenode,i,j); route.pop(mazenode[i][j]);退栈 }else{ route.push(mazenode[i][j-1]); } }else if(i+1<row&&mazenode[i][j].up(mazenode,i-1,j)){ if(route.contain(route,mazenode,i-1,j)){//判断上边是否在栈内 mazenode[i][j].changeValue(mazenode,i,j); route.pop(mazenode[i][j]);退栈 }else{ route.push(mazenode[i-1][j]); } } } route.toRoute();//修改路径的值 for(int i=1;i<row-1;i++){//进行打印 for(int j=1;j<colum-1;j++){ System.out.print(mazenode[i][j].value+" "); } System.out.println(); } } }mazenode类public class MazeNode { public int index1; public int index2; public int value; public MazeNode(int value,int index1,int index2) { this.value=value; this.index1=index1;//下标1 this.index2=index2;//下标2 } //改变找个点的值为2 public void changeValue(MazeNode[][] mazeNode,int index1,int index2){ mazeNode[index1][index2].value=2; } //判断左边是否可走 public boolean left(MazeNode[][] mazeNode,int index1,int index2){ if(mazeNode[index1][index2].value==0){ return true; }return false; } //判断上边是否可走 public boolean up(MazeNode[][] mazeNode,int index1,int index2){ if(mazeNode[index1][index2].value==0){ return true; }return false; } //判断右边是否可走 public boolean right(MazeNode[][] mazeNode,int index1,int index2){ if(mazeNode[index1][index2].value==0){ return true; }return false; } //判断下边是否可走 public boolean down(MazeNode[][] mazeNode,int index1,int index2){ if(mazeNode[index1][index2].value==0){ return true; }return false; } }MyStake类//栈import java.util.Arrays; import java.util.EmptyStackException; public class MyStack { private PuzzleValue[]array2; private MazeNode[]array; private int size; private final int INITSIZE=10; public MyStack(){ array=new MazeNode[INITSIZE]; array2=new PuzzleValue[INITSIZE]; } //查找栈内是否存在此路径 public boolean contain(MyStack stack,MazeNode[][] mazeNode,int index1,int index2){ for(int i=0;i<size;i++){ if(array[i].index1==index1&&array[i].index2==index2){ return true; } } return false; } //入栈 public void push(MazeNode mazeNode){ if(array.length==size){ array= Arrays.copyOf(array,array.length+(array.length>>1)); }else { array[size]=mazeNode; size++; } } //出栈 public void pop(MazeNode mazeNode){ if(size==0){ return; }else{ array[size]=null; size--; } } //获得栈顶元素 public MazeNode gettop(){ return array[size-1]; } //改变栈内的value值 public void toRoute(){ for(int i=0;i<size;i++){ array[i].value=3; } } }
-
HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)
-
【功能模块】鲲鹏性能分析工具中Java性能分析子工具【操作步骤&问题现象】1、正常安装工具同一个java进程,Profiling分析可用,Sampling分析不可用。【截图信息】第一台服务器Sampling分析不可用第二台服务器Sampling分析也不可用两台服务器都安装了高版本jdk第一台安装了bisheng JDK11第二台安装了open jdk11两台服务器都是鲲鹏云ECS
-
使用鲲鹏性能分析工具中Java性能分析子工具在服务器kunpeng(192.168.0.113)上添加Guardian后,Guardian是运行状态,可以执行某些分析操作,如图所示:此时把kunpeng服务器重启,Guardian就变为连接超时状态,如下图所示:按照常用习惯,大家还是希望Guardian所在服务器重启后能自动连接上,就算不能自动连接,手动连接也行,但是在上面的工具按钮里也没有重新连接的按钮。估计大部分人的做法是删除了重新安装。当然,经过多次试验后会发现,这时候选择修改节点,重新输入用户名和密码,这个Guardian节点是会自动连上的,不过这一点不太直观,很难第一时间想到。所以,建议这里改进一下业务逻辑或者界面形式:能实现自动重新连接最好。实在不能自动连接,可以Guardian区域按钮栏加一个“连接”的图标按钮,让使用者可以手动输入登录信息。
-
2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。
-
AR502H的容器是开放的,并且制作容器的脚本已经发布了,请参考《软件二次开发指南》中相关章节那么如何在这个脚本中修改,制作带有JDK的容器内,可参考以下步骤:第一步:在build目录下创建一个jdk目录,里面存放下载好的jdk文件,以下已OpenJDK为例第二步:修改编译环境中的/usr/local/bin/create-rootfs的脚本,新增3处内容,如下图红框内的部分第三步:参考边缘计算网关二次开发指南中的LXC容器包制作章节,制作LXC的ova镜像最后,在设备上安装容器,登录到容器内,查看java版本号注:如何把java程序制作成应用,后续会发布出来,调测阶段,可以先使用java -jar拉起对应的程序试试效果。如在使用过程中有问题请跟帖讨论。原创文章,转载请注明出处
-
2020-10-18:java中LongAdder和AtomicLong有什么区别?#福大大架构师每日一题#
-
大多数人选择Java可能只是因为听说Java前景好、Java比较好找工作、Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的。今天娜娜米就带大家一起了解一下,学编程选Java的8大理由。1、Java广受欢迎Java仍然是世界上最受欢迎的编程语言之一,有无限多种方法使用Java。根据2019年月TIOBE指数和IEEE Spectrum排名,Java依然是最受欢迎的编程语言。2、薪资可观最新的一些报告证明,Java程序员是业内薪资最高的程序员之一。根据全球数字化业务媒体机构Quartz的分析,拥有Java技能有利于提高薪资。职业规划公司Gooroo在2015年薪资和需求报告中指出,Java仍然是美国、英国和澳大利亚最受欢迎和薪资最高的编程语言之一。根据全球就业相关内容搜索引擎Indeed.com对职业排名的报告显示,2016年2月美国Java开发人员招聘职位的平均薪资为102,000美元。3、Java程序员市场紧缺雇主对Java编程技能有着很高的需求。Java是广泛使用的编程语言,拥有庞大的客户群。Java程序员如今虽然很火,但市场依旧是供不应求的,而且在待遇上Java程序员也比大多数其他语言编程人员要高,因此学习Java还是大有可为,学好后,不用担心自己的所学没有用武之地。java 项目大全:www.1b23.com4、Java无处不在据估计,全球范围内有超过30亿部设备运行Java,超过其他任何一种语言。Java被用于全球最知名的众多网站中,包括eBay.com、Linkedin.com、Amazon.com和Facebook.com。Java尤其适用于在几乎任何行业中开发企业应用等,包括金融服务、医疗保健和制造业。这也意味着Java方面的工作比较好找,另一点是在做Java开发时如果遇到问题,可以很容易从网上找到解决办法。5、简单易学Java是一个面向对象的编程语言,容易理解。而且略去了多重加载、指针等难以理解的概念。并且实现了自动垃圾回收,大大简化了程序设计。6、安全高效的工具选择编程语言的一个重要因素是:能够确保工作效率的优秀开发工具。许多工具都是免费或者开源提供。NetBeans和Eclipse都是集成开发环境(IDE)空间的最佳证明。而且,Java充满安全性,Java中没有指针,这样就没有办法直接访问内存了。另外Java也不容易出现内存泄露。7、充满激情的Java社区全球约有900万名Java开发人员,创造了一个充满活力和积极进取的Java社区,大家共同努力发展壮大这个功能强大的编程语言。它能够通过多种方式融入你的整个职业生涯中。8、Java拥有强大的发展路线图Oracle仍将遵循强大的路线图致力发展Java。同时Java有着更快的更新频率,Oracle计划将该平台模块化,同时提高安全性和使用性能。这将使Java扩展更为轻松,可用于从大型软件系统到小型设备的各种设备规模,其中包括嵌入式物联网处理器。以上就是娜娜米为大家介绍的Java开发的8大优势的相关内容啦,希望对大家有所帮助。
-
看putObject的时候meta里面会过滤掉这些header
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签