本站实用小技巧

1、本站支持多词汇分词搜索,在输入框输入搜索词可以用空格进行分词,例如本站有篇通过端口结束电脑进程的教程,不知道标题,也忘了具体内容,如果单搜索“端口”可能有很多结果。但是搜索“端口 进程”就会发现只有两个搜索结果了,实用方便快捷。2、文章代码块均支持代码复制功能,可以点击代码块上的复制按钮进行复制。例如:echo "hello";3、文章页均具备TOC导航功能,会在文章右侧显示“目录导航”按钮方便查看文章目录,例如:一级目录可点击右侧“目录导航”按钮快速定位到内容二级目录二级目录内容4、 电脑端浏览本站文章可点击文章下方二维码方块图标即可生成页面二维码,用手机扫码即可在手机端浏览5、若有资源链接失效可留言,当看到会及时更新

JAVA实现收发UDP请求

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。发送import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * 实现UDP协议的发送端: * 实现封装数据的类 java.net.DatagramPacket 将你的数据包装 * 实现数据传输类 java.net.DatagramSocket 将数据包发出去 * * 实现步骤: * 1.创建DatagramPacket对象,封装数据,接收的地址和端口 * 2.创建DatagramSocket对象, * 3.调用DatagramSocket类的方法send,发送数据包 * 4.关闭资源 * * DatagramPacket构造方法: * DatagramPacket(byte[] buf,int length,InetAddress address,int port) * * DatagramSocket构造方法: * DatagramSocket()空参数 * 方法:send(DatagramPacket d) * * */public class UDPSendTest { public static void main(String[] args) throws Exception {//创建发送端Socket对象 DatagramSocket ds = new DatagramSocket();//创建数据并打包 String s = "My name is happywindman"; byte[] bytes = s.getBytes(); int length = s.length(); InetAddress ip = InetAddress.getByName("127.0.0.1");//根据自己主机的ip地址或者主机名 int port = 10086; DatagramPacket dp = new DatagramPacket(bytes, length, ip, port);//发送数据 ds.send(dp);//释放资源 ds.close(); }}接收import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/* * 实现UDP接收端 * 实现封装数据包java.net.DatagramPacket 将数据接收 * 实现输出传输 java.net.DatagramSocket 接受数据包 * * 实现步骤: * 1.创建DatagramSocket对象,绑定端口号 * 要和发送数据端口号一致 * 2.创建字节数组,接受发来的数组 * 3.创建数据包对象DatagramPacket * 4.调用DatagramSocket对象方法 receive(DatagramPacket dp) * 接受数据,数据放在数据包中 * 5.拆包 * 发送的IP地址 * 数据包对象DatagramPacket()方法getAddress()获取的是发送端的IP地址对象 * 接受到的字节个数 * 数据包对象DatagramPacket()方法getLength() * 发送方的端口号 * 数据包对象DatagramPacket()方法getPort() * 6.关闭资源 */public class UDPReceiveTest { public static void main(String[] args) throws Exception {//创建接收端Socket对象 DatagramSocket ds = new DatagramSocket(10086);//接收数据 byte[] bytes = new byte[1024]; int length = bytes.length; DatagramPacket dp = new DatagramPacket(bytes, length); ds.receive(dp); //解析数据 获取地址 带斜杠 InetAddress address = dp.getAddress(); //获取发送端的IP地址对象 String ip = address.getHostAddress(); //获取发送的端口号 int port = dp.getPort(); byte[] data = dp.getData(); int len = dp.getLength();//输出数据// System.out.println(address); System.out.println(String.format("发送方地址:%s:%s", ip, port)); System.out.println(new String(data, 0, len)); System.out.println(new String(bytes, 0, len)); ds.close(); }}

Java设置/获取系统剪切板/剪贴板

非常简单,调用jdk内部封装方法即可设置剪切板 public static void setClipboardString(String text) { // 获取系统剪贴板 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); // 封装文本内容 Transferable trans = new StringSelection(text); // 把文本内容设置到系统剪贴板 clipboard.setContents(trans, null); }获取剪切板内容public String getFromClipboard() { Transferable transferable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null); if (transferable != null && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) { try { return (String) transferable.getTransferData(DataFlavor.stringFlavor); } catch (Exception e) { return ""; } } return "";}

对于selenium遍历元素获取text与html

示例 driver.get("http://zntx.cc/bbslist-2331.html"); List<WebElement> elements = driver.findElements(By.xpath("/html/body/div[1]/div")); for (int i = 0; i < elements.size(); i++) { WebElement element = elements.get(i); // 获取text 两种效果相同 System.out.println("getText"+element.getText()); System.out.println("innerText"+element.getAttribute("innerText"));// 获取html System.out.println("innerHTML"+element.getAttribute("innerHTML")); System.out.println(element.findElement(By.xpath("//*[@id=\"main\"]/div[5]/span[1]/a")).getAttribute("innerHTML")); }

两款不错的AI代码补全插件

https://www.codota.comhttps://www.aixcoder.com

Objects.equals(a,b)和a.equals(b)

Objects.equals(a,b)解析首先查上源码:public static boolen equals(Object a,Object b){ return(a==b)||(a!=null&&a.equals(b))可以看到源码种有一个判空,以防止null值作为参数时报空指针异常。a.equals(b)解析a.equals(b)方法的源码:public static boolen equals(Object obj){ return(this==obj) }其并没有判空操作,当null值调用这个方法就会报空指针异常。因此才建议使用equals时常量放在前面调用,括号里写变量,或者使用Objects.equals方法

Java学习+面试指南JavaGuide

来自GitHub:https://github.com/Snailclimb/JavaGuide

JS获取当前地址网址参数

1,获取当前窗口的url; 结果:http://localhost:61768/Home/Index?id=2&age=18 var` `url = window.location.href;2,获取当前窗口的主机名; 结果:localhost:61768 var host = window.location.host;3,获取当前窗口的端口; 结果:61768 var port = window.location.port;4,获取当前窗口的路径 ; 结果:/Home/Index  var pathname = window.location.pathname;5,获取当前文档的Url;结果:http://localhost:61768/Home/Index?id=2&age=18  var URL = document.URL;6,获取参数;结果:?id=2&age=18  var search = window.location.search;7,设置或获取 URL 的协议部分;结果:http  var protocol = window.location.protocol8,设置或获取 href 属性中在井号“#”后面的分段  var hash = window.location.hash分割url提取参数var search = window.location.search;var age = getSearchString('age', search); //结果:18var id = getSearchString('id', search); //结果:2//key(需要检索的键) url(传入的需要分割的url地址,例:?id=2&age=18)function getSearchString(key, Url) { var str = Url; str = str.substring(1, str.length); // 获取URL中?之后的字符(去掉第一位的问号) // 以&分隔字符串,获得类似name=xiaoli这样的元素数组 var arr = str.split("&"); var obj = new Object(); // 将每一个数组元素以=分隔并赋给obj对象 for (var i = 0; i < arr.length; i++) { var tmp_arr = arr[i].split("="); obj[decodeURIComponent(tmp_arr[0])] = decodeURIComponent(tmp_arr[1]); } return obj[key];}原文链接:https://www.cnblogs.com/qianxundaozhu/p/11584900.html

几种CI持续集成工具简介

Travis CI首先要介绍的Travis CI是一个广泛使用的CI工具,因为它简直是Github爱好者的福音,而且用户份额很大。其支持绝大部分主流编程语言,包括但不限于:C、Java、Python、PHP等等。目前有超过90万的开源项目、60万的用户在使用Travis CI来作为他们的持续集成工具。Travis CI最大的特色和便利店是其与开源社区Github兼容得非常好,它可以极其方便地帮你为Github上的开源项目仓库快速地拉起一个持续集成防护网,而且对于开源项目完全免费,不花一分钱,这对学习者非常友好。而且Travis CI的用法也不复杂,也不需要你写什么复杂代码,它是用过 yml配置文件的形式来指定Travis CI要做的事情,来满足你的流程规划,先做什么,再做什么,最后做什么,挺方便。Jenkins大名鼎鼎的Jenkins简直如雷贯耳,国内很多的通信大厂、互联网大厂都正在使用中!Jenkins是一款开源的 CI&CD 工具,工具本身是Java写的,然而却支持各种编程语言项目的自动化任务,包括构建、测试、部署等。Jenkins一直是开源CI&CD软件领导者, 安装简易、配置简单、提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。Jenkins 支持各种运行方式,可通过系统包安装、也可以作为Java程序安装,甚至可以通过Docker来安装。而且Jenkins在企业级开发中可以非常便捷地与SVN、Git等代码管理工具无缝对接!如今已经步入2.0时代的Jenkins系统,其最大的特色便是加入了Pipeline流水线功能,Pipeline的加持,让Jenkins系统对项目做持续集成时变得更加灵活和强大。必须要说的是,Jenkins系统现在确实越来越庞大,越来越“重”了,如果真是个小项目那它来做持续集成有点浪费了。Circle CICircleCI 功能上和上面介绍的两个工具其实也差不多,但是使用起来可能更加“轻量”一些,这对学习者来说还是非常友好的!Circle CI也支持GitHub、Bitbucket等平台上的项目,只要你项目的代码有变更,就会自动抓取,根据你的配置,提供运行环境,执行测试、构建和部署等一系列自动化操作。Drone CIDrone CI与上面提到的诸如Jenkins等系统相比, 它也算是一个更加轻量级的CI工具,无论是工具本身的安装、部署,还是利用它做一些自动化工作流程的构建,都会简洁一些,更加好上手一些。Drone CI工具的使用,基本上也就是几行配置文件的事情,就像下面这样,不烦心其他工具除了前文提到的这四个主流工具,其他还有诸如像:flow.ciCodeShipSemaphore CI等等工具和网站,思想都差不多,都可以帮我们完成持续集成的目标!作者:CodeSheephttps://www.bilibili.com/read/cv4147684出处: bilibili

适合Java初学者的Spring Boot实战文章合集Spring-Boot-In-Action

来自b站大佬codesheep的文章合集仓库:https://github.com/hansonwang99/Spring-Boot-In-Action

利用阿里Teambition搭建个人网盘 TeambitionShare网盘直链解析

简述下流程:首先你要有Teambition账号,登录后创建项目,在网址栏复制project/后的一串字符(下文称为项目ID),安装以下开源项目到你的虚拟主机或Windows电脑,访问后设置项目id、Teambition的cookie等信息即可。源码PHP的,所以只需要PHP虚拟主机即可。TeambitionShare开源地址:https://github.com/FlxSNX/TeambitionShareGitee上的Fork地址:https://gitee.com/cwayteam/TeambitionShare.git当然windows电脑亦可直接运行node.js版本:https://hik.lanzous.com/iz4skkictqf解压后直接运行即可。