Mac 如何安装EasyConnect(一):使用Safari浏览器打开

说明:远程连接公司内网,需要安装相关客户端软件,根据公司服务器地址访问安装即可 一、下载Mac OS平台安装包 打开Safari浏览器访问服务器地址,根据提示下载Mac OS平台安装包。 二、安装软件EasyConnect 三、安装完成之后,Safari浏览器继续访问,输入用户名、密码,点击登录 五、连接成功,如下图: 六、设置Safari插件 七、注意事项 请通过Safari浏览器登录使用,不支持双击EasyConnect应用图标方式登录; . 相关文章 Mac 如何安装EasyConnect(一):使用Safari浏览器打开 Mac 如何安装EasyConnect(二):直接打开EasyConnect连接

python 五位数数位

输入一个五位数,左对齐依次输出其数位,中间用3个空格间隔。如输入12345,则输出: 1 2 3 4 5 输出以上内容的python语句是 print (1," ",2," ",3," ","4," ",5) 说明:1之后的逗号,会产生一个空格,加上指定输出的空格和2之前的逗号产生的空格,一共隔了3个空格。 【输入形式】 输入一个5位的整数 【输出形式】 输出各数位,数位之间间隔3个空格。 【样例输入】 12345 【样例输出】 1 2 3 4 5 n = int(input()) w1 = n // 10000 w2 = (n - w1 * 10000) // 1000 w3 = (n - w1*10000- w2*1000) // 100 w4 = (n - w1*10000- w2*1000 - w3 * 100) // 10 w5 = n % 10 print(w1," "

python列表字符串互转和反转输出

1. 字符串转列表 str1 = "12345" list1 = list(str1) print list1 str2 = "123 sjhid dhi" list2 = str2.split() #or list2 = str2.split(" ") print list2 str3 = "www.google.com" list3 = str3.split(".") print list3 输出为: ['1', '2', '3', '4', '5'] ['123', 'sjhid', 'dhi'] ['www', 'google', 'com'] 2. 列表转字符串 str4 = "".join(list3) print str4 str5 = ".".join(list3) print str5 str6 = " ".join(list3) print str6 输出为: wwwgooglecom www.google.com www google com

wxParse-微信小程序解析富文本组件的使用总结

wxParse是一款非常好用的解析微信小程序中富文本的组件,支持大部分的html标签: #####基本使用方法: (1)Copy文件夹wxParse ,放在小程序根目录下。 wxParse/ -wxParse.js(必须存在) -html2json.js(必须存在) -htmlparser.js(必须存在) -showdown.js(必须存在) -wxDiscode.js(必须存在) -wxParse.wxml(必须存在) -wxParse.wxss(必须存在) -emojis(可选) (2)引入文件: //在使用的view的js中引入WxParse模块 var WxParse = require(’…/…/wxParse/wxParse.js’); //在使用的Wxss中引入WxParse.css,也可以在app.wxss中引入 @import “/wxParse/wxParse.wxss”; // 在使用的view的.wxml中引入模板 #####1.单数据渲染: (1)在data中声明article变量: article:'<div class="content"><h3 class="main-title">白内障</h3><h4 class="sub-title">需要注意什么?</h4><div class="desc><p>1.减少辐射,防紫外线,特别是要避开强光紫外线。如看电视的距离尽量远一点,不要长时间看手机,夏季外出时打遮阳伞、带防紫外线的太阳眼镜等; </p><p>2.平时多喝水,避免机体缺水。老年人体内缺水是导致晶体变浑浊的原因之一,因此平常要养成多喝水的习惯;[M3] </p><img class="img" src="http://www.xiexingcun.com/Poetry/6/images/53e.jpg" alt="" /></div></div>' (2)在onload声明周期中使用: `` WxParse.wxParse(‘article’, ‘html’, this.data.article, this, 5); /** WxParse.wxParse(bindName , type, data, target,imagePadding)1.bindName绑定的数据名(必填)2.type可以为html或者md(必填):但在实际应用中,发现此插件比较倾向于处理 html 的解析,对于 markdown语法只是简单的兼容。3.data为传入的具体数据(必填)4.target为Page对象,一般为this(必填)5.imagePadding为当图片自适应是左右的单一padding(默认为0,可选) */ (3)在.wxml中使用: `` 在上面的基本使用里面在.js文件和.wxml文件里面出现的article这个是两个文件里面是一样的。article是js文件里面的一个变量是可以变的,只需保证js文件和wxml文件里面变量名一致即可。 #####2.数组循环渲染 (1).数据格式: list: [ { name: 'CataResult', id: '7', content: '<div class="content"><h3 class="

UGUI合并批次的规则

基本规则主要有以下几条: 按照层叠顺序处理 层叠顺序是按照Hierarchy中的顺序从上往下进行的,也就是越靠上的组件,就会被画在越底部 图A处理后和图B相同 图集Batch规则 计算层级号的算法:如果有一个UI元素,它所占的屏幕范围内(通常是矩形),如果没有任何UI在它的底下,那么它的层级号就是0(最底下);如果有一个UI在其底下且该UI可以和它Batch,那它的层级号与底下的UI层级一样;如果有一个UI在其底下但是无法与它Batch,那它的层级号为底下的UI的层级+1;如果有多个UI都在其下面,那么按前两种方式遍历计算所有的层级号,其中最大的那个作为自己的层级号。 合并批次:如果相邻间的两个批次正好可以Batch的话就会进行Batch 注:图集的穿插并不是指Hierarchy中的树形结构上的,即使树形结构存在穿插的情况,但是图片之间并没有遮挡情况的,不算图集的穿插 Z轴的影响 Unity以Canvas为单位进行绘制,按照前两条规则,当遍历列表进行处理时,如果列表中有X元素Z轴不为0,则处理会被打断,X元素之前的归为一个处理批次,X元素以及X元素之后的元素归为一个处理批次 举例列表{A, B, C, D, E, F}中C的Z轴不为0,那么会从C处开始被打断,列表的处理被强行拆分为两个列表{A, B}和{C, D, E, F} Text优先级高于Image 按照规则2,ImageA层级号为0,ImageB层级号为1(ImageA和ImageB可以Batch),TextC层级号为0,绘制顺序为: TextC,ImageA,ImageB (FrameDebugger中为两个DM)

DB2__基本概念——联邦

建立联邦 优点:优点是数据仍然保留在原来的存储位置,而不必建立一个集中的式数据仓储。 缺点:数据联邦查询反映会慢,不适合频繁查询,而且容易出现锁争用和资源冲突等问题 建立联邦表步骤 前提条件:知道两个数据库的ip,用户名,密码及被连数据库的版本 eg: 数据库 qqdb ip: 22.5.225.225 端口:50000 密码:123456 数据库 aadb ip:22..5.225.102 端口:50300 密码 :qazwsx qqdb到aadb的联邦 第一步:建node CATALOG tcpip node 'qqdb_nd' remote 22.5.22.102 server 50300 查看已建好的node db2 list db directory 第二步:起本地库别名 catalog db qqdb as qqdb_fd at node qqdb_nd; 第三步:建立server CREATE SERVER "qqdb_server" TYPE DB2/UDB VERSION '9.7' WRAPPER DRDA authorization "qqdb" PASSWORD "123456" OPTIONS (DBNAME 'qqdb_fd', NODE 'qqdb_nd' ); 第四步:建立映射 create user mapping for qqdb server "

django中查询的select_related方法和prefetch_related方法

select_related - 数据库上的join Django考虑到了标准查询这种低效的查询方式,因此在设计ORM的时候设计了提升性能的方式。select_related就是其中之一。select_related将会根据外键关系,在执行查询语句的时候一次性获得相关对象的信息,这种操作带来的结果是更加复杂的查询语句和避免对于即将使用的外键对象的额外数据库查询。Django的文档详细的描述了相关内容,在此只进行简要介绍。标准的查询代码如下: b = B.objects.get(id=2) a = b.a 换用select_related之后,代码如下: b = B.objects.select_related('a').get(id=2) 'a’是B模型存在关联的A模型,指定a可以只查询A和B的数据,如果没有参数,则查询出所有相关联的model信息。 我们可以看到,select_related实际上是在数据库层面进行了一次inner join操作,因此一次性获取了所有需要的信息,也就是说使用select_related()方法一次性的把B关联的对象都查询出来放入对象中,再次查询时就不需要再连接数据库,节省了后面查询数据库的次数和时间。 需要注意的是,我们可以使用任意外键关系(ForeignKeyField)或一对一关系(OneToOneField)作为参数传给select_related,同时也可以使用反向的一对一关系,此时应使用related_name作为参数。某些情况下,你可能想获取所有的相关对象,或者你并不知道关联关系,此时可以使用不加参数的.select_related(),该方式下将会根据关联关系(级联的)获取所有关联的对象, 即假设有外键关系为A。 prefetch_related - Python上的join 与select_related类似,prefetch_related也可以大幅提高查询效率,但是prefetch_related的方式跟select_related大不一样。select_reateld是通过创建一条包含SQL join操作的SELECT语句来一次性获得所有相关对象的信息。因此,select_related需要从同一个数据库中获得相关对象。但是,为了避免由于join操作带来的较大的查询集结果,select_related被限制在了单值关系——外键关系或一对一关系。 另一方面,prefetch_related为每一个关系使用了单独的查询,并在Python层面进行’join’操作,因此该操作允许多对多关系以及反向关系,而这是select_related无法做到的。我们这次使用prefetch_related执行查询,代码如下: b = B.objects.prefetch_related('a').get(id=2) 可以看到,Django首先进行了id=5的第一次查询获取对象b,然后根据外键关系进行了第二次查询获取b.a。为了增强理解,我们引入第三个模型C,这次我们从A模型上查询id__lte=5的A对象及其相关对象,代码如下: class C(models.Model): b = models.Foreignkey(B, related_name='cs') qs = A.objects.prefetch_related('bs', 'bs__cs').filter(id__lte=5) Django首先查询了id小于等于5的所有A对象,然后根据反向关联关系,查询所有外键到这些A对象的B对象,然后查询所有外键到这些B对象的C对象。 select_related与prefetch_related性能对比: 在查询集中的对象字段较多较复杂,且查询集较大的时候,或需要使用反向外键关系或多对多关系作为参数优化查询的时候,应该选用prefetch_related,在查询集中对象字段简单的,查询集不大的时候,应选用select_related。 下面链接介绍的更详细: https://blog.csdn.net/cugbabybear/article/details/38342793

CentOS 7进入紧急修复模式解决

打开CentOS7页面出现: welcome to emergency mode!after logging in ,type “journalctl -xb” to view system logs,“systemctl reboot” to reboot ,“systemctl default” to try again to boot into default mode。 give root password for maintenance (?? Control-D???): 这个错误要注意一下是不是加载了外部硬盘、存储器或者是网络共享空间,在重启时没有加载上导致的。 解决方法: 1.执行 runlevel 显示unknown 2.修改默认启动级别 a. 先删除: mv /etc/systemd/system/default.target /etc/systemd/system/default.target.back #将文件重命名即可 b. 创建软连接文件: ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target 或者 ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target 也可以使用systemctl命令: systemctl set-default graphical.target systemctl isolate multi-user.target 执行过程中报错:Error getting authority: Error initializing authority: Could not connect: Resource temporarily unavailable (g-io-error-quark, 1)

双11狂欢的背后】微服务注册中心如何承载大型系统的千万级访问?

https://mp.weixin.qq.com/s?__biz=MzU0OTk3ODQ3Ng==&mid=2247483759&idx=1&sn=7e6575861a779711a5ef5f27b8e088e4&chksm=fba6e96cccd1607a709c1437eb0b92df703b8d8eac466205798618480abf600b67f032782e88&scene=21#wechat_redirect 目录: 一、问题起源 二、Eureka Server设计精妙的注册表存储结构 三、Eureka Server端优秀的多级缓存机制 四、总结 一、问题起源 Spring Cloud架构体系中,Eureka是一个至关重要的组件,它扮演着微服务注册中心的角色,所有的服务注册与服务发现,都是依赖Eureka的。 不少初学Spring Cloud的朋友在落地公司生产环境部署时,经常会问: Eureka Server到底要部署几台机器? 我们的系统那么多服务,到底会对Eureka Server产生多大的访问压力? Eureka Server能不能抗住一个大型系统的访问压力? 如果你也有这些疑问,别着急!咱们这就一起去看看,Eureka作为微服务注册中心的核心原理 下面这些问题,大家先看看,有个大概印象。带着这些问题,来看后面的内容,效果更佳 Eureka注册中心使用什么样的方式来储存各个服务注册时发送过来的机器地址和端口号? 各个服务找Eureka Server拉取注册表的时候,是什么样的频率? 各个服务是如何拉取注册表的? 一个几百服务,部署上千台机器的大型分布式系统,会对Eureka Server造成多大的访问压力? Eureka Server从技术层面是如何抗住日千万级访问量的? 先给大家说一个基本的知识点,各个服务内的Eureka Client组件,默认情况下,每隔30秒会发送一个请求到Eureka Server,来拉取最近有变化的服务信息 举个例子: 库存服务原本部署在1台机器上,现在扩容了,部署到了3台机器,并且均注册到了Eureka Server上。 然后订单服务的Eureka Client会每隔30秒去找Eureka Server拉取最近注册表的变化,看看其他服务的地址有没有变化。 除此之外,Eureka还有一个心跳机制,各个Eureka Client每隔30秒会发送一次心跳到Eureka Server,通知人家说,哥们,我这个服务实例还活着! 如果某个Eureka Client很长时间没有发送心跳给Eureka Server,那么就说明这个服务实例已经挂了。 光看上面的文字,大家可能没什么印象。老规矩!咱们还是来一张图,一起来直观的感受一下这个过程。 二、Eureka Server设计精妙的注册表存储结构 现在咱们假设手头有一套大型的分布式系统,一共100个服务,每个服务部署在20台机器上,机器是4核8G的标准配置。 也就是说,相当于你一共部署了100 * 20 = 2000个服务实例,有2000台机器。 每台机器上的服务实例内部都有一个Eureka Client组件,它会每隔30秒请求一次Eureka Server,拉取变化的注册表。 此外,每个服务实例上的Eureka Client都会每隔30秒发送一次心跳请求给Eureka Server。 那么大家算算,Eureka Server作为一个微服务注册中心,每秒钟要被请求多少次?一天要被请求多少次? 按标准的算法,每个服务实例每分钟请求2次拉取注册表,每分钟请求2次发送心跳 这样一个服务实例每分钟会请求4次,2000个服务实例每分钟请求8000次 换算到每秒,则是8000 / 60 = 133次左右,我们就大概估算为Eureka Server每秒会被请求150次

后台根据地址传输二进制流,前台显示图片

1、后台 @RequestMapping(value="/getPicPathByPicId/{picId}",method=RequestMethod.GET) @ResponseBody public ResponseEntity<byte[]> getPicStream(@PathVariable("picId")String picId)throws IOException{ Upload sysFile = fileService.getFileById(Long.valueOf(picId)); String filePath = sysFile.getFilePath(); File file = new File(filePath); //http头部 HttpHeaders httpHeaders = new HttpHeaders(); //application/octet-stream : 二进制流数据 httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders, HttpStatus.CREATED); } 2、前台 2.1、不能用ajax传输二进制流 2.2、status根据传输成功的status code决定 function picFormatter(value,row, index){ var s = '<a class = "view" href="javascript:void(0)">'+ '<img id ="imgcontainer" style="width:300;height:40px;"/></a>'; var picId = row.picture; var url = realPath+"/xzzf/file/getPicPathByPicId/"+ picId; var xhr = new XMLHttpRequest(); xhr.

ST-LINK 到 SWD接线图

1、ST-LINK的外形图如下图所示: 2、接口引脚顺序定义如下图所示,注意缺口位置。 3、具体引脚定义如下图所示。 4、ST-LINK 到 SWD接线 SWD接口一般4个引脚,分别为:电源正、TCK、TMS、电源负 电源正—JTAG的1引脚 TMS—JTAG的7引脚 TCK—JTAG的引脚 电源负—JTAG的标有GND的引脚

jQuery-简单选择器

1.基本选择器 $("#id") //ID选择器 $("div") //元素选择器 $(".classname") //类选择器 $(".classname,.classname1,#id1") //组合选择器 2.过滤选择器(重点) $("li:first") //第一个li $("li:last") //最后一个li $("li:even") //挑选下标为偶数的li $("li:odd") //挑选下标为奇数的li $("li:eq(4)") //下标等于 4 的li(第五个 li 元素) $("li:gt(2)") //下标大于 2 的li $("li:lt(2)") //下标小于 2 的li $("li:not(#runoob)") //挑选除 id="runoob" 以外的所有li 2.2内容过滤选择器 $("div:contains('Runob')") // 包含 Runob文本的元素 $("td:empty") //不包含子元素或者文本的空元素 $("div:has(selector)") //含有选择器所匹配的元素 $("td:parent") //含有子元素或者文本的元素 2.3可见性过滤选择器 $("li:hidden") //匹配所有不可见元素,或type为hidden的元素 $("li:visible") //匹配所有可见元素 2.4属性过滤选择器 $("div[id]") //所有含有 id 属性的 div 元素 $("div[id='123']") // id属性值为123的div 元素 $("div[id!='123']") // id属性值不等于123的div 元素 $("div[id^='qq']") // id属性值以qq开头的div 元素 $("

jQuery-HTML内容查询与设置

获得内容 - text()、html() 以及 val() 三个简单实用的用于 DOM 操作的 jQuery 方法: text() - 设置或返回所选元素的文本内容html() - 设置或返回所选元素的内容(包括 HTML 标记)val() - 设置或返回表单字段的值 下面的例子演示如何通过 jQuery text() 和 html() 方法来获得内容: <script> $(document).ready(function(){ $("#btn1").click(function(){ alert("Text: " + $("#test").text()); }); $("#btn2").click(function(){ alert("HTML: " + $("#test").html()); }); }); </script> </head> <body> <p id="test">这是段落中的 <b>粗体</b> 文本。</p> <button id="btn1">显示文本</button> <button id="btn2">显示 HTML</button> </body> 下面的例子演示如何通过 jQuery val() 方法获得输入字段的值: <script> $(document).ready(function(){ $("button").click(function(){ alert("值为: " + $("#test").val()); }); }); </script> </head> <body> <p>名称: <input type="

jQuery-CSS类属性操作

jQuery 操作 CSS jQuery 拥有若干进行 CSS 操作的方法。我们将学习下面这些: addClass() - 向被选元素添加一个或多个类removeClass() - 从被选元素删除一个或多个类toggleClass() - 对被选元素进行添加/删除类的切换操作 jQuery addClass() 方法 下面的例子展示如何向不同的元素添加 class 属性。当然,在添加类时,您也可以选取多个元素: <script> $(document).ready(function(){ $("button").click(function(){ $("h1,h2,p").addClass("blue"); $("div").addClass("important"); }); }); </script> <style type="text/css"> .important { font-weight:bold; font-size:xx-large; } .blue { color:blue; } </style> </head> <body> <h1>标题 1</h1> <h2>标题 2</h2> <p>这是一个段落。</p> <p>这是另外一个段落。</p> <div>这是一些重要的文本!</div> <br> <button>为元素添加 class</button> </body> 您也可以在 addClass() 方法中规定多个类: <script> $(document).ready(function(){ $("button").click(function(){ $("body div:first").addClass("important blue"); }); }); </script> <style type="text/css"> .important { font-weight:bold; font-size:xx-large; } .

Halcon 图像筛选与Connection() 、 Union()、Fillup()

Halcon 图像处理 Connection() 可以理解为: 分割 按照 Region 接触与否分割 Region。 是一些算子的先行算子 CountObj()、SelectObj() 等。 Union() 可以理解为:聚合 FillUp() 可以理解为:填充 在图像处理中,做筛选操作时候,这三个函数相互配合会有意想不到的效果。 需注意的是:当前这一步的 Region 的 聚、 散 状态。

Nginx URL重写(rewrite)配置及信息详解

Nginx URL重写(rewrite)配置及信息详解 URL重写有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中 Nginx URL重写(rewrite)介绍 和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就会支持rewrite的模块,但是也必须要PCRE的支持 rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分内容,重定向到replacement,结尾是flag标记。 rewrite语法格式及参数语法说明如下: rewrite <regex> <replacement> [flag]; 关键字 正则 替代内容 flag标记 关键字:其中关键字error_log不能改变 正则:perl兼容正则表达式语句进行规则匹配 替代内容:将正则匹配的内容替换成replacement flag标记:rewrite支持的flag标记 flag标记说明: last #本条规则匹配完成后,继续向下匹配新的location URI规则 break #本条规则匹配完成即终止,不再匹配后面的任何规则 redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址 permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址 rewrite参数的标签段位置: server,location,if 例子: rewrite ^/(.*) http://www.czlun.com/$1 permanent; 说明: rewrite为固定关键字,表示开始进行rewrite匹配规则 regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址 replacement部分是http://www.czlun.com/$1 $1,是取自regex部分()里的内容。匹配成功后跳转到的URL。 flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.czlun.com/$1 地址上 regex 常用正则表达式说明 字符 描述 \ 将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如“\n”匹配一个换行符,而“\$”则匹配“$” ^ 匹配输入字符串的起始位置 $ 匹配输入字符串的结束位置 * 匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll” + 匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“oll”,但不能匹配“o” ? 匹配前面的字符零次或一次,例如“do(es)?”能匹配“do”或者“does”,"?"等效于"{0,1}" . 匹配除“\n”之外的任何单个字符,若要匹配包括“\n”在内的任意字符,请使用诸如“[.\n]”之类的模式。 (pattern) 匹配括号内pattern并可以在后面获取对应的匹配,常用$0...$9属性获取小括号中的匹配内容,要匹配圆括号字符需要\(Content\) rewrite 企业应用场景 Nginx的rewrite功能在企业里应用非常广泛:

PHP 强制返回状态码以及http状态码含义

header('HTTP/1.1 404 Not Found'); 1xx: 信息 消息:描述:100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。101 Switching Protocols服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。103 Checkpoint用于 PUT 或者 POST 请求恢复失败时的恢复请求建议。 2xx: 成功 消息:描述:200 OK请求成功(这是对HTTP请求成功的标准应答。)201 Created请求被创建完成,同时新的资源被创建。202 Accepted供处理的请求已被接受,但是处理未完成。203 Non-Authoritative Information请求已经被成功处理,但是一些应答头可能不正确,因为使用的是其他文档的拷贝。204 No Content请求已经被成功处理,但是没有返回新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。205 Reset Content请求已经被成功处理,但是没有返回新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。206 Partial Content客户发送了一个带有Range头的GET请求,服务器完成了它。 3xx: 重定向 消息:描述:300 Multiple Choices多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。301 Moved Permanently所请求的页面已经转移至新的 URL 。302 Found所请求的页面已经临时转移至新的 URL 。303 See Other所请求的页面可在别的 URL 下被找到。304 Not Modified未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。305 Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取。306 Switch Proxy目前已不再使用,但是代码依然被保留。307 Temporary Redirect被请求的页面已经临时移至新的 URL 。308 Resume Incomplete用于 PUT 或者 POST 请求恢复失败时的恢复请求建议。 4xx: 客户端错误 消息:描述:400 Bad Request因为语法错误,服务器未能理解请求。401 Unauthorized合法请求,但对被请求页面的访问被禁止。因为被请求的页面需要身份验证,客户端没有提供或者身份验证失败。402 Payment Required此代码尚无法使用。403 Forbidden合法请求,但对被请求页面的访问被禁止。404 Not Found服务器无法找到被请求的页面。405 Method Not Allowed请求中指定的方法不被允许。406 Not Acceptable服务器生成的响应无法被客户端所接受。407 Proxy Authentication Required用户必须首先使用代理服务器进行验证,这样请求才会被处理。408 Request Timeout请求超出了服务器的等待时间。409 Conflict由于冲突,请求无法被完成。410 Gone被请求的页面不可用。411 Length Required"

ab fails to connect to localhost

The following command fails: $ ab -n 1 localhost:8000/ ... Benchmarking localhost (be patient)...apr_socket_recv: Connection refused (111) But this one succeeds: $ ab -n 1 127.0.0.1:8000/ In /etc/hosts I have: 127.0.0.1 localhost.localdomain localhost ::1 localhost.localdomain localhost The issue here is caused by ab taking the first result returned by apr_sockaddr_info_get: https://github.com/apache/httpd/blob/2.4.29/support/ab.c#L1835-L1837 But apr_sockaddr_info_get returns a list. If it were to try the second sockaddr structure, it would connect. This way it works: rv = apr_sockaddr_info_get(&sa, REMOTE_HOST, APR_UNSPEC, REMOTE_PORT, 0, mp); if (rv !

相似度计算之Jaccard系数

Jaccard相似系数 定义 给定两个集合A,B,Jaccard 系数定义为A与B交集的大小与A与B并集的大小的比值,定义如下: 当集合A,B都为空时,J(A,B)定义为1。 与Jaccard 系数相关的指标叫做Jaccard 距离,用于描述集合之间的不相似度。Jaccard 距离越大,样本相似度越低。公式定义如下: 其中对参差(symmetric difference) 性质 实例 主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以Jaccard系数只关心个体间共同具有的特征是否一致这个问题。 1、如果比较X与Y的Jaccard相似系数,只比较xn和yn中相同的个数,公式如下: 如集合A={1,2,3,4};B={3,4,5,6}; 那么他们的J(X,Y)=1{3,4}/1{1,2,3,4,5,6}=1/3; 2、样本A与样本B是两个n维向量,而且所有维度的取值都是0或1。例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。 概念浅析:假设A是坚果Pro2 , B是 苹果8x。 为了比较两个手机,给出了n个评价指标,即n维特征,也就是n维向量:1-是国产、2-有刘海、3-价格高于5000。那么对于A=(100),B=(011)。所以,n维向量指样本的N维特征,组成一个集合。而集合是由元素组成的,在对应的特征位置,如果样本有该特征,这个位置集合值取1,表示包含该元素;否则,取0,表示不包含该元素。可见,元素=特征。 P:样本A与B都是1的维度的个数 q:样本A是1,样本B是0的维度的个数 r:样本A是0,样本B是1的维度的个数 s:样本A与B都是0的维度的个数 那么样本A与B的杰卡德相似系数可以表示为: 这里p+q+r可理解为A与B的并集的元素个数,而p是A与B的交集的元素个数。 而样本A与B的杰卡德系数表示为: 代码 1、当两个集合元素个数相同,则直接调包 from numpy import * import scipy.spatial.distance as dist # 导入scipy距离公式 matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]]) print ("dist.jaccard:", dist.pdist(matV,'jaccard')) 2、当集合元素个数不同 def correlation(set_a,set_b): unions = len(set_a.union(set_b)) intersections = len(set_a.intersection(set_b)) return 1. * intersections / unions

configure: error: no acceptable C compiler found in $PATH

准备编译新版的liastdc++.so.6,结果在执行如下语句的时候出错—— ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib 没有安装c编译器,犯蠢了,忘记重新安装CentOS之后,装C编译器了—— sudo yum install gcc 问题解决

python__00013__Python中类似C中的include方式

python__00013__类似C中的include方式 一、python的include方式 在C或者C++中有时候会用到#include指令包含某个文件,但是杂python中却没有这样的指令,python提供了import指令 二、代码如下 d:\hello.py: import os def print_hello(): print('hello') hello_str = 'hello_str' e:\call.py: import os import sys sys.path.append('d:') from hello import * print_hello() print(hello_str) 输出结果如下: E:\>python call.py hello hello_str

2018-11-12

今天 ,xampp中mysql意外关闭,弄了一上午,关闭mysqld.exe解决 下午安装PHP成功但配置失败,最后卸载重装了xampp使用了默认的 晚上安装xdebug失败

2018-11-11

基础语言环境:php 5.6,mysql,apache(外部服务器,xampp(PHP开发环境) 开发工具:phpstorm,微信web开发者工具/vs code,postman(测试接口)(三段分离),navicat 其中thinkphp只是web框架,需要php运行环境。 常见web服务器:apache,nginx。 第一步:安装xampp,mysql,apache 第二步: 安装tp5( https://www.kancloud.cn/manual/thinkphp5/118003官方文档下载之后解压到xampp/htdocs 第三步: 将刚下的thinkphp改名为zerg,framew剪切进去 重名thinkphp 测试成功。 第四步:下载phpstrome 快捷键:注释:ctrl+/,xtrl+shift+/ ------------------------------------------------------ 理解含义

猫眼一二面面经

电话打来要求视频面试,头一遭的我立马行动起来换衣服,加qq面试就开始了。 1、讲项目框架,问了其中文件上传的细节,没答上来,一年前的代码忘了; 2、hashmap与hashtable的区别; 3、jvm内存的划分; 4、堆与栈的区别; 5、java内存模型,实现原理; 6、volatile,为什么不能保证原子性; 7、手写单例模式; 8、线程的状态; 9、线程安全,线程池(较深入); 10、事务ACID,隔离级别,脏读、不可重复读、幻读,mysql的默认隔离级别,如何修改; 11、hashmap的实现原理,如果key相应位置链表有大量数据,如何缩小查找时间; 12、hashmap与concurrenthashmap的区别; 13、synchronized与lock的区别,公平锁,非公平锁; 14、垃圾回收算法,新生代老年代永久代,GCRoots; 15、HTTP 状态码; 16、TCP/IP体系结构; 17、三次握手; 18、TCP和UDP的区别; 19、get与post的区别; 20、MyISAM和InnoDB的区别; 21、linux下shell,bash; 22、各排序算法的平均时间复杂度,文件太大需要IO用什么排序; 23、最左前缀索引的解释,索引常见结构; 24、手撕代码,实现库函数开方; 最后,面试官说,可能有三面可能没有,都会发信息通知的。 静待结果,我佛保佑。

LinuxC基础学习一之各类软件环境介绍

LinuxC基础学习一之各类软件环境介绍 一、常用软件 1、VM12+Ubuntu14.04 2、Everything: 本地搜索工具 3、Mindmanager:思维导图工具 4、Xshell: 远程访问软件 二、LINUX文件目录结构 目录结构: Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的。 Dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似windows下的分配盘符)。 Etc:该目录主要存储一些配置文件。 Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。 Proc:process,表示进程,该目录中存储的是Linux运行时候的进程。 Root:该目录是root用户自己的家目录。 Sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。 Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。 Usr:存放的是用户自己安装的软件。类似于windows下的program files。 Var:存放的程序/系统的日志文件的目录。 Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。 三、 LINUX基本指令 / root目录 ~ home目录 su:切换用户 cd:切换目录 pwd:显示当前目录 ls:例举当前目录下的文件 ls -l 显示文件详细信息 ls -a 显示隐藏文件(文件名以小数点开头的文件)

100以内的数分解问题

将一个数分解为他的质因数的乘积形式。 import java.util.ArrayList; public class FenJie { static int n = 100; static void fenjie(int i,ArrayList sushu) { //非素数分解方法(递归) for(int j = 2;j<=n;j++) { if(sushu.contains(j)) if(i%j == 0) { int s = i/j; if(sushu.contains(s)) { System.out.println( j + " * " + s); break; } else { System.out.print( j + " * "); fenjie(s,sushu); break; } } } } public static void main(String[] args) { ArrayList sushu = new ArrayList(); sushu.

C#实战012:Excel操作-获取Excel某一行数据并存入数组

前面获取了Excel某一列数据并存入数组,接着我们继续获取Excel某一行数据并存入数组,方法基本一致,就一点小小的改动,以下是完整的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Office.Interop.Excel; using System.Diagnostics; using System.Reflection; namespace ConsoleApplication3 { class EditExcel { #region 获取Excel某行数据 /// <summary> /// 获取Excel某行数据 /// </summary> public List<string> RowDB = new List<string>(); public void getRowDB(string ExcelName) { //创建 Excel对象 Application App = new Application(); //获取缺少的object类型值 object missing = Missing.Value; //打开指定的Excel文件 Workbook openwb = App.Workbooks.Open(ExcelName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); //获取选选择的工作表 Worksheet ws = ((Worksheet)openwb.

JAVA线程池

JAVA线程池 主要常用的接口 Executor接口 ExecutorService接口 Callable接口 Exectuors工具类 Executor接口 介绍:执行器,主要是用来执行任务 方法:void execute(@NotNull Runnable command); ExecutorService接口 介绍:执行器服务,继承于Executor接口,主要是往里面扔任务执行 常用方法:execute() 和submit() void execute(@NotNull Runnable command)主要是放没有返回值的任务 Future<T> submit(@NotNull Callable command)主要是用来处理有返回值的任务 Callable接口 介绍:和Runnable接口很相似,主要区别在于Callable可以有返回值并且可以抛出异常 方法:V call() V是泛型 Exectuors工具类 介绍:一个工具类,和Arrays这种很相似;主要用来创建线程池 线程池 概述:预先创建一些线程存储起来,当有任务过来的时候线程去执行;执行完之后回到线程池中,这样避免了频繁的创建和销毁线程带来的cpu浪费。 注意: 线程池一般会维护两个队列,等待队列和完成队列,等待队列使用的是BlockingQueue(一般是用这三种:LinkedBlockingQueue;ArrayBlockingQueue;synchronousQueue)。线程池不会自动关闭回收,需要调用shutdown()这类方法 shutdown() 等待所有的任务执行完之后才正常关闭shutdownNow() 立刻关闭线程池 常见的线程池 FixedThreadPool CacheThreadPool SingleThreadPool ScheduledThreadPool WorkStrealingPool ForkJoinPool FixedThreadPool 特点:创建线程池的时候指明线程的大小(线程长度固定);等待队列使用的是LinkedBlockingQueue,当任务过大的时候,等待队列迅速增大;存在存在着耗尽系统资源的问题。而且在线程池空闲时,即线程池中没有可运行任务时,它也不会释放工作线程,还会占用一定的系统资源,需要shutdown。 public class FixedThreadPoolTest{ public static void main(String []args){ ExecutorService service = Executors.newFixedThreadPool(5); //指定长度 System.out.println(service); //输出线程池状态 这个时候是0 //放任务 使用execute()放放是无返回结果的任务 for(int i = 0; i < 6; i++){ service.

C#实战010:Excel操作-查询Excel中的数据

基本操作搞定我们就可以来对数据进行操作了,先来个查询,找到你想要的数据先,废话不多说,直接附上带代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Office.Interop.Excel; using System.Diagnostics; using System.Reflection; namespace ConsoleApplication3 { class EditExcel { #region 查询Excel中的数据 /// <summary> /// 查询Excel中的数据 /// </summary> /// <param name="ExcelName"></param> public void query(string ExcelName) { //创建 Excel对象 Application App = new Application(); //获取缺少的object类型值 object missing = Missing.Value; //打开指定的Excel文件 Workbook openwb = App.Workbooks.Open(ExcelName, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); //获取选选择的工作表 Worksheet ws =((Worksheet)openwb.

OI退役记

看过无数篇大佬们的退役记, 我叫Lyx,CLEZ第数不清届OI team队员,一个无名的小蒟蒻,一个逐梦者。 临近NOIP2018,决定在最后一周里记录一些东西,为自己短暂而庸碌的OI生涯留个纪念。 这个故事,关于梦想。 2018.11.5 Day -4 突然想起来写点东西,原本是打算把洛谷11月赛的最后一题写了的(咕咕咕) 越到比赛前越是有杂七杂八的念头,干脆写出来,让自己能平静地去考场。 原本是想把标题写成“再见,OI”,转念一想我可能没资格再见一次OI,就写成了“NOIP2018退役记”,毕竟有大概率我就从此退役了。 4个月前脑子一热决定停课搞OI,于是和家里开始了长达数月的争吵。那时我就看hzwer大佬的博客,看他的回忆录,那时真的是看哭了,我也在下面留言说要把学校的名字挂在榜上,可能我就要食言了。 还记得当时家长一直苦口婆心劝我放弃,全国前50名不是我这种人可以去想的,我说我就想办法去拼一个银牌或者铜牌,他们又说山东省队十几个名额也不是我这种人可以去想的,我说我想办法冲一下,不行就参加邀请赛,他们又说省一对我这种人来说也是难如登天的…… 他们给了个折中方案,让我专心学文化课,每周去上两次竞赛课,偶尔再写一点点代码就好了。 那不就是在明着劝退么…… 或许是初生牛犊不怕虎,或许是死鸭子嘴硬,我就是偏执地走上了停课搞OI的孤独之旅。 前三个月是干劲十足的,又开了自己的博客,范围量从几十几百到一两万,做的题也有一千多道了。10月开始打比赛后,就开始感觉自己前段时间的努力完全是在放屁。梦寐以求的实力连影子都看不到,一次比一次低的分数直接把我打垮了。 整个10月几乎没做多少题,整个人陷入了自闭一样,每天可能3道题都写不完,长时间的颓B站、颓知乎,或者大白天蒙头大睡,晚上又是翻来覆去失眠。我恨不得给自己电击治疗,我就是个没用的废物。 后来……后来班主任突然把我叫到学校去了,说怕我出现很大的心理压力,抽出时间陪我散心。那晚上聊了很久很久,回到家都还在微信上倾诉,趴在床上边写边哭。 后来竞赛老师也来给我讲最后时间怎么准备,怎么平衡自己的心态,坦然面对即将发生的一切。 后来家长也一直鼓励我,即使是一开始最反对我学OI的也鼓励我坚持走下去,即使是一无所获也无怨无悔。 不会一无所获的,全新的学习方法、全新的知识、全新的生活,身边所有的鼓励和支持,自己从自闭中走出来,还有CSFZ第一届OI team,我所收获的已经足够我一生受用。 希望到时出了考场,无论结果是好是坏,都可以笑着对所有支持我的人说一声感谢。 (或许,还会有一个回归OI记,一句“我不甘心就这么算了”呢) 还有这个博客我是不打算就这么沉下去,联赛考完应该会在这个博客上更新准备高考的东西(现在高二,我能更一年多呢,然后大学又更ACM(#^ . ^#))(文化课博客是不是偏离CSDN的主题了) 还没想好怎么更新文化课博客,可能要做一些思维导图(已经置顶了),还有一些总结和考试复盘啥的,再来个文化课每周学习记录吧。需要的高中小伙伴也可以看看。我倒不怕复课,对于文化课我还是很有信心的。当然现在回去肯定捞了,打不过那些巨佬了),这也是为什么家里人最初反对我放弃自己擅长的文化课去学一个全新的东西,可能我就是不喜欢安稳喜欢作吧(笑)) “请翻过这座山,让世界听到你们的故事。”IG七年磨一剑,终于翻过了这座山。OI这座奇峰可能我是无法登顶了,但还有高考这座险峰等我攀登。翻过高考这座山,我也能骄傲的讲出自己的故事,自己的清华梦与OI梦。 2018.11.6 Day-3 继续做NOIP的真题。把17、16、15、14的套题做完了。再以前年份的题不打算做了,时间来不及,反正以前也做过不少,只是没有拿来全部完成。前段时间打模拟赛打到心态崩,现在拿真题来增长信心了(笑),希望到时上场真能打出信心十足的感觉。 突然很期待退役后的生活了,准备怒刷几十本练习册怒踩红榜(flag) 2018.11.7 Day-2 复习了暑假集训时的题,对于现在的我来说依旧是难炸了…… 绷了4个月的神经还是稍微放松了一下。走到这一步感觉有没有奖都不重要了,学习的知识、四个月的努力汗水并不需要一个所谓奖项去证明。应该也不会去想着省选了,文化课落下的知识也得补,自己规划好的高二学习方案也要落实。终究还是要去高考的。 2018.11.8 Day-1 原本说要停电,幸好没有停。 今天打算理一下自己的模板、回顾一下知识点,也没有搞定多少。上午又开始头疼,下午只有先休息睡觉。 原本说走到今天得奖与否不重要,为什么还会天天失眠,还会每天神神叨叨的紧张兮兮的呢……无论结果怎样,快一点结束吧,OI生活既美好又痛苦,再这样下去真的会神经衰弱。 还是莫队说的对,OI是很看天赋的竞赛,人贵有自知之明。 除非联赛考得真的好,否则都不会去想省选了……文化课带来的压力,家长带来的压力,就算要学省选都不知道自己还敢不敢去放手一搏了…… 还有到时出考场时,一定一定要笑着走出来,最后查分无论好坏都不要哭鼻子,奋斗四个月不是拿来哭丧脸的。 OI只是我高中阶段尝试性的一步,无论有没有结果都不重要。大学才是我真正追寻人生梦想的平台,大学的ACM生涯又会是美好的,而我现在要做的就是拼命考上大学。 我本不是一个喜欢招摇的人,因为IG夺冠立下的flag,把QQ微信博客甚至网易云音乐昵称都改了。既然公之于众了,那我就要真的把自己说的大话圆回来。我们家已经考上两个清北了,为啥不能再多我一个? 希望自己真的能把自己的梦想实现,即使只能实现一部分也是很好的。我记得我看过一段话,找不到原出处了(记个大概): 人生就是在做动态规划,你的每一步决策将你从一个状态转移到另一个状态。你当前的决策不一定是最优的,但努力奋斗能带给你的是未来更多的可能性。 既然看不清前面的路,那就当个孤注一掷的疯子拿青春去做试验,翻过高考这座山,前面会是更高的平台和更广阔的天空,世界将听到我的故事。 “有一个夜晚我烧毁了所有的记忆,从此我的梦就透明了,有一个早晨我扔掉了所有的昨天,从此我的脚步就轻盈了。” 我的OI,问心无愧。 --------------------

Netty 粘包 拆包 | 史上最全解读

文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 大厂必备 + 涨薪必备疯狂创客圈 经典图书 : 《SpringCloud、Nginx高并发核心编程》 面试必备 + 大厂必备 + 涨薪必备疯狂创客圈 价值1000元 百度网盘资源大礼包 随便取 GO->【博客园总入口 】独孤九剑 Netty灵魂实验 : 本地 100W连接 高并发实验,瞬间提升Java内力 文章目录 价值连城:2021春招月薪过5万 面试题 系列万字长文: 疯狂创客圈 springCloud 高并发系列写在前面 什么是粘包和半包?粘包和半包 图解半包的实验粘包和半包更全实验粘包和半包原理拆包的原理Netty 中的拆包器拆包之前的消息包装开发一个接收端的自定义拆包器自定义拆包器的实际应用为什么拆包器要加在pipeline 的最前面写在最后疯狂创客圈 实战计划 价值连城:2021春招月薪过5万 面试题 系列 搞定下面这些面试题,2021春招月薪过5万(猛!)阿里、京东、美团、头条… 随意挑、横着走!!!Java基础1: JVM面试题(史上最强、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14365820.html2:Java基础面试题(史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14366081.html3:死锁面试题(史上最强、持续更新)[https://www.cnblogs.com/crazymakercircle/p/14323919.html]4:设计模式面试题 (史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14367101.html5:架构设计面试题 (史上最全、持续更新、吐血推荐)https://www.cnblogs.com/crazymakercircle/p/14367907.html还有 10 几篇 篇价值连城 的面试题具体… 请参见【 疯狂创客圈 高并发 总目录 】 万字长文: 疯狂创客圈 springCloud 高并发系列 springCloud 高质量 博文 nacos 实战(史上最全) sentinel (史上最全+入门教程) springcloud + webflux 高并发实战 Webflux(史上最全) SpringCloud gateway (史上最全)还有 10 几篇 万字长文 的高质量 博文具体… 请参见【 疯狂创客圈 高并发 总目录 】 写在前面 大家好,我是作者尼恩。

抽象类和接口的区别

作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 很好的一篇文章!

【ArcGIS|空间分析】栅格数据和矢量数据的面积计算

栅格矢量数据计算面积之前,都需要将数据进行投影转换,设置单位以方便计算。 文章目录 1、栅格数据面积计算方法一:添加字段并计算方法二:以表格显示分区统计 2、 矢量数据面积计算 1、栅格数据面积计算 方法一:添加字段并计算 1、点击图层属性信息,查看源中的像元大小。 2、在图层属性表中添加面积字段。 3、在字段处右击选择字段计算器,并输入算式(像元宽度×像元高度×[count])。 方法二:以表格显示分区统计 1、选择【以表格显示分区统计】工具,输入数据和输出数据存放位置。 2、打开输出表,查看面积信息。 2、 矢量数据面积计算 1、添加面积字段,为浮点型。 2、右键字段名,选择计算几何。 3、打开计算几何窗口,设置属性、坐标系和单位。 4、查看计算结果。

Java抽象类Animal和Cat

Java抽象类概念 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。 在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 抽象类 在Java语言中使用abstract class来定义抽象类。如下实例: People.java文件 package com; /** * @author HeLiu * @Description 人抽象类(Java语言中使用abstract class来定义抽象类) * @date 2018/11/9 10:31 */ public abstract class People { private String name; private Integer age; private String sex; public People(String name, Integer age, String sex) { System.out.println("Constructing an People"); this.name = name; this.age = age; this.sex = sex; } public void smile() { System.out.println("ha...ha...ha..."); } public void said() { System.

撸了一个APP

利用周末和节假日的时间撸了一个APP,免费+内购模式,持续更新维护中,虽然忙一点,累一点,但是挺有成就感的。 版本下载地址: itunes.apple.com/cn/app/id14… 关于苹果审核 最初的提交版本的时候也是被拒了N次,后来添加审核开关配置,做了一些应对审核的处理,现在提交版本基本上没有被拒过,一般第二天就通过了。(后面会单独总结一篇审核相关的文章) 现在正在做的 目前是在逐步优化ASO,提高下载量和曝光率,即将完成本地所有数据的加密存储,包括图片/视频/笔记/db/userdefault等所有本地数据,均加密处理。 后续要实现的功能 功能上,考虑加入私密通讯录,密码管理器,录音&保存,文件系统等功能; 用户体验上,增加一些引导页面,介绍页面,免得有些功能用户都不会用; 如果后面用户多了的话,考虑加入订阅付费功能。 用到的一些UI资源及工具: icon免费下载 www.iconfont.cn www.flaticon.com 在线制作简单文字图标 bingoicon.com/font www.logoko.com.cn app icon批量生成工具 icon.wuruihong.com/guide/ios 用到的一些技术点: 1.使用ImageIO框架更改图片的GPS信息; 2.大文件(视频)分段写入沙盒; 3.UICollectionView加载多图滑动卡顿问题优化; 4.JS筛选WKWebView网页中的所有图片,并下载到本地; 5.图片/视频/文字转化为PDF/ZIP格式,并支持添加密码功能; 6.本地文件/字符加密,大文件分段加密; 应用介绍 App Store史上最安全、最强大、最卓越的私密相册App为你解决这些问题!再也不用担心私密的照片视频被别人看见了!私密相册为您提供多重密码保护机制、简单便捷的照片存储空间,完美地将您的私密照片远离一切恶意偷窥者的窥探! 【产品功能】 √ 支持登陆密码:没有您的密码,任何人无法开启应用访问隐私照片/视频 √ 支持创建自定义文件夹,您可以给不同的相片视频分类 √ 无限存储:无数量、无容量限制,想存多少就存多少 √ 无线WIFI传输,更快速的文件传送 √ 内置私密浏览器,更方便下载网页中的图片 【多种密码保护机制】 √ 支持指纹手势密码解锁 √ 支持设置文件夹密码 √ 每张图片/视频/笔记均使用独立加密算法,根据每张图片的特征使用不同的加密算法, 即使手机被破解,也无法看到图片/视频/笔记的信息. √ 不在服务端备份照片,没有泄露风险,卸载app后照片即永久删除. 【私密浏览器】 √ 更方便下载网页中的图片,支持批量下载 √ 自动清除浏览历史,真正的无痕浏览器 【图片编辑处理】 √ 支持将图片/视频转化为带有密码的PDF/ZIP文件 √ 更多的滤镜效果和图片编辑工具 √ 擦除/修改图片中的地理位置信息,将修改好的图片保存到手机相册,你就会看到地理位置真的变了。 【私密相机】 √ 自带私密相机,安全拍摄私密照片,是最佳的相册隐私卫士,而且可以随意选择拍摄出照片的位置 您还在等什么? 只要轻轻一按即可拥有如此强大、功能丰富的免费加密App, 从此不再惧怕隐私照片或视频存在手机中被人偷窥!

Android资源知识(一)之Resources概览

资源(Resources)是指应用中的图片、媒体文件、字符串、颜色值等。Android程序员在开发过程中随时要和Resources打交道,比如R.layout.activity_main、@string/hello…… 一、Android应用资源的构成 Android系统提供了一套强大的资源管理框架Resources和AssetManager,下面我们从工程目录结构来学习下Android应用资源体系的构成,工程目录结构图如下: 从图中可以看到Android应用资源由两部分构成:资源目录和资源文件。 1、资源目录 资源目录就是res目录下的各个子目录,如anim、drawable、drawable-hdpi、layout、menu、raw、values等。这些目录都必须是系统预定义的,也就是说像res/drawable,res/layout都是合法的,而像res/kinbos、res/abcd都不是合法的,系统是识别不了的。无法在R类中生成相应的数据。 res/anim是存放动画相关资源的。 res/drawable是存放图片资源的。 res/layout是存放xml布局文件的。 res/menu是存放菜单样式资源的。 res/raw是存放音频、视频等纯数据文件资源的。 res/values是存放字符串、颜色值、数组等常量定义的文件的。 2、资源文件 资源文件就是资源目录下的数据文件,比如.xml、图片、音视频文件等。注意:资源文件只能放在资源目录下,而不能放在res目录下。 二、Android应用程序的编译步骤 这里之所以提到Android应用程序的编译步骤是因为Android对应用资源的处理贯穿了应用的整个开发流程的。下面我们按步骤Properties——>Builders打开工程的Properties对话框,截图如下: Android应用程序的编译过程主要有以下4个步骤: 1、Android Resource Manager Android通过aapt工具(aapt工具位于路径:[sdk目录]/build-tools/[android-xx])根据res目录下的资源在R类中生成与之相对应的嵌套子类及static final型常量。R.java文件代码如下: package com.kinbos.note; public final class R { public static final class anim { public static final int abc_fade_in=0x7f040000; public static final int abc_fade_out=0x7f040001; public static final int abc_slide_in_bottom=0x7f040002; public static final int abc_slide_in_top=0x7f040003; public static final int abc_slide_out_bottom=0x7f040004; public static final int abc_slide_out_top=0x7f040005; } } 从上述代码中我们可以看出,res目录下的子目录是嵌套子类的类名,如代码中的anim,具体的文件名称是anim类的static final型常量。

JavaScript-获取页面元素的四种常用方法

1.根据id获取元素 document.getElementById("id属性的值"); 返回值是一个元素对象 案例:点击按钮弹框 <body> <input type="button" name="" id="btn" value="button"> <script> var btnobj = document.getElementById("btn") btnobj.onclick = function () { alert("OK!"); } </script> </body> 点击按钮后页面弹出提示框。 2.根据标签名字获取元素 document.getElementsByTagName("标签的名字"); 返回值是一个伪数组 案例:点击按钮改变多个p标签的文字内容 <body> <input type="button" value="button" name="" id="btn"> <div id="div1"> <p>abcd</p> <p>abcd</p> <p>abcd</p> </div> <script> //根据id获取按钮,注册点击事件,添加事件处理函数 document.getElementById("btn").onclick = function(){ //根据标签名字获取标签 var changes = document.getElementById("div1").getElementsByTagName("p"); //循环遍历这个数组 for(var i=0;i<=changes.length;i++){ //每个p标签,设置文字 changes[i].innerHTML = "ABCD"; } } </script> </body> 3.根据name属性的值获取元素 document.getElementsByName("name属性的值"); 返回值是一个伪数组 案例:点击按钮,改变所有name属性值为name1的文本框中的value属性值 <body> <input type="button" value="

Vuex入门学习

Vuex入门 介绍 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。 在我看来,Vuex在一定程度上来理解是全局变量,但是又不仅限于全局变量的存在;因而它的状态存储是响应式的! state 状态

C# 输出调用堆栈信息

在想看的那个方法中添加获取堆栈信息,然后输出即可: 例如: public void GetName() { string stackInfo = new StackTrace().ToString(); //调取该方法的堆栈信息 Debug.log(stackInfo); }

spec文件知识整理

rpmbuild目录下各个文件的用途: spec文件一般包含以下部分: ==================================文件头==================================================== Name: hellorpm #名字为源码tar.gz 包的名字 Version: 1.0.0 #版本号,一定要与tar.gz包的一致哦 Release: 1%{?dist} #释出号,也就是第几次制作rpm Summary: helloword #软件包简介,最好不要超过50字符 License: GPL #许可,GPL还是BSD等 URL: #可以写一个网址,也可以不要 Packager: abel #作者,可以不要 Source0: %{name}-%{version}.tar.gz #定义用到的source,也就是你的源码包,可以有多个,用Source1、Source2等表示 BuildRoot: %_topdir/BUILDROOT #这个是安装或编译时使用的“虚拟目录”,该参数非常重要,因为在执行make install的过程中,需要把软件安装到这个路径中,在打包(即%files段)的时候,依赖“虚拟目录”为“根目录”进行操作。这个参数可以不必定义,系统默认此参数为:/root/rpmbuild/BUILDROOT/%{name}-%{version}-%{release}.x86_64,后面引用可以直接使用$RPM_BUILD_ROOT。 BuildRequires: gcc,make #编译时的包依赖 Requires: python-apscheduler >= 2.1.2-1.el7,python-daemon >= 1.6-1.el7 #软件运行依赖的软件包,也可以指定最低版本如 bash >= 1.1.1 %description #描述,随便写 %package #定义一个子包,需要生成两个rpm包需要此项,只生成一个时不需要此项。举例如下: %package devel Summary: Header files and libraries for developing apps which will use bzip2. Group: Development/Libraries description devel Header files 当定义一个子包时,必须至少包含Summary:,Group:,description选项。%package后面可以加-n选项也可以不加,如果在%package时用-n选项,那么在description时也要用,如:description -n my-telnet-server,如果在%package时用-n选项,那么在%files时也要用,如:%files -n my-telnet-server

malloc和free使用要小心

先说一下用法: char *stemp = (char*)malloc(256 * sizeof(char)); if(stemp == NULL) return FALSE; 注意有可能分配失败,所以这里需要判空一下。 使用结束要free: free(stemp); stemp = NULL; 今天使用的时候突然蹦出来弹框: 心情又崩溃了,想换其他方法了,想想还是把问题解决了;找啊找。。。。 发现问题出在free那里,Debug看一下free里面的指针不为空啊,重新来,看char *stemp = (char*)malloc(256 * sizeof(char)); 再看free的时候: 去,怎么不一样了? 最后又找,好长的函数,终于找到了 对指针赋值了。 【总结】使用malloc和free的时候,一定好注意,不要对分配的指针赋值操作了,复制后,free找不到原来的指针,必然会报错。也就是说,malloc和free是成对出现,free的时候指针必须是malloc过的。对指针的操作,的确需要很深的“内功”。

syslog日志系统——日志采集

日志采集的流程 客户端埋点 客户端埋点就是在客户系统植入日志发送的代码,可以是前端页面、app界面、后端服务等,把需要的日志信息发送到指定的日志采集接口。 日志的发送应该采用异步方式,这样不会对客户系统代码的执行造成影响。 日志采集 日志采集接口把接收过来的日志数据写入到日志文件,日志文件以天为单位进行存储。 日志采集接口代码 接口采用@IgnoreToken标记不需要进行令牌校验。 采用@CrossOrigin标记,让接口能够跨域访问,支持AJAX跨域请求。 @ApiOperation(value = "提交日志") @ApiImplicitParams({ @ApiImplicitParam(name = "logData", value = "日志数据", dataType = "LogData", paramType = "body") }) @RequestMapping(path = "/log/add", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") @IgnoreToken @CrossOrigin public ResponseData addLog(@RequestBody LogData logData) { String logID = logService.logToFile(logData); return ResponseData.success(logID); } 日志文件格式的设计 日志以文本格式保存,每条日志按行写入。 日志行的格式如下: 时间戳|日志ID|日志数据JSON 日志按行保存的好处是,可以利用BufferedReader的readLine方法进行日志的按行读取。 日志按行保存,要对日志数据JSON部分进行处理,把换行符替换掉。 日志按行保存的主要代码 public String logToFile(LogData logData){ LogGroupData groupData = getLogGroup(logData.getKey()); logData.setGroupID(groupData.getGroupID()); String date = ConvertUtil.

安装webpack

npm install webpack@1.15.0 -g (我只有这个版本可用, 之前什么方法都没用,用cnpm 也没用)

安装node.js重装与卸载

官网选取之前版本4.4.7.msi 默认下载 1、卸载node.js 2、删除C:\Users\Administrator\AppData\Roaming下边的npm、npm-cache 3、重新安装node.js,再次在dos中输入node -v和npm -v可以看到相应的版本号 (之前出了很多问题,也试了用cnpm,亲测最小白最快)

Java中compareTo用法

Java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值 String a = "a"; String b = "b"; System.out.println(a.compareTo(b)); 输出值-1 1 2 3 4 5 String a = "b"; String b = "a"; System.out.println(a.compareTo(b)); 输出值1 1 2 3 4 5 String a = "a"; String b = "a"; System.out.println(a.compareTo(b)); 输出0 1 2 3 4 5 两个字符串首字母不同,则该方法返回首字母的asc码的差值 String a = "abc"; String b = "bcdfg"; System.out.println(a.compareTo(b)); 输出-1 1 2 3 4 5 参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值 String a = "abc"; String b = "

nohup: ignoring input and appending output to ‘nohup.out’

在执行linux命令的时候出现了下面错误: nohup: ignoring input and appending output to ‘nohup.out’ 或者: nohup: failed to run command `xxx.sh’: Permission denied 一般我们自己写的脚本,想利用nohup命令让脚本程序自己运行,但是nohup他必然会产生日志文件,所以这需要我们将日志文件写到一个文件里面去,默认是写入到nohup.out中,但是有时候会出现上面的问题。 错误原因: 文件没有写入权限。。。 一般就算你用sudo chmod给文件加权限也没用。 解决方法: nohup ./xxx.sh > /dev/null 2> /dev/null & #./xxx.sh 是你自己需要执行的脚本 # 例如: nohup ./bug > /dev/null 2> /dev/null & 这样他会给你输入到 /dev/null 这个特别的文件下面 它像一个linux黑洞,所有重定向到它的信息都会自动消失。 如果你的输入日志很重要的话就不建议重定向到/dev/null中了。

syslog日志系统——接口的设计

数据接口的返回报文 { "code": 0, "count": 0, "data": {}, "msg": "string" } 数据接口调用总是返回上述报文格式JSON数据,这里的字段设计是为了兼容layui的数据表格取数接口。 code字段 接口成功返回时为0,发生调用错误时不为0 msg字段 接口调用的消息信息,发生调用错误时为错误描述信息,建议是直观友好的信息能够直接显示给用户看。 data字段 接口调用返回的业务数据 count字段 数据分页时使用,数据的总行数,layui数据表格组件需要该字段 登录接口例子 登录成功 { "code": 0, "msg": "", "data": { "password": "e10adc3949ba59abbe56e057f20f883e", "user": "admin", "token": "3b9ce276b01c46d3be5ffc75698782d2" }, "count": 0 } 登录失败 { "msg": "密码错误!", "code": -1 } 数据接口的令牌token机制 先调用登录接口,成功登陆后返回令牌token,然后用令牌作为参数进一步调用后续的接口。 token参数建议使用@RequestHeader传输,可以避免与get请求冲突。 根据安全级别可以把接口划分为两类:不需要令牌token和需要令牌token 登录接口示例代码 @ApiOperation(value = "登录") @ApiImplicitParams({ @ApiImplicitParam(name = "user", value = "用户名", dataType = "String", paramType = "query"), @ApiImplicitParam(name = "

策略梯度(Policy gradient)学习心得

文章目录 策略梯度网络结构策略梯度网络权重的更新策略梯度网络更新的时机策略梯度动作的选择策略梯度概率更新幅度最后 以前的博文介绍了Q-learning与DQN的相关知识与实例( https://blog.csdn.net/allen_li123/article/details/83621804) Q-learning与DQN都属于基于值函数的深度强化学习,因为其输出都是关于动作的值,然后再根据 ϵ − g r e e d y \epsilon-greedy ϵ−greedy贪婪策略进行动作采取 但是如果动作是一个连续性动作,他的值函数不可能完全计算出来,而策略梯度可以很好的解决动作连续性问题(我也还没弄懂为什么可以解决,想明白了再更新) 策略梯度网络结构 输入结点为观测到的特征数与特征值 隐藏层根据实际情况进行更改 输出层为动作的数量,其值再经过softmax函数处理变为采取的概率值 策略梯度网络权重的更新 神经网络都是根据误差函数来进行更新,而从严格意义上来讲,策略梯度算法是没有误差的,因为其输出只是选择的概率值,为了进行权重更新,我们将选取的动作的概率乘以一个变量作为损失函数,而该变量的取值取决于该动作的奖励收益 训练目标为损失函数最大化,这样就可以学习使奖励收益越来越大,而选取该奖励的概率也越来越大 策略梯度网络更新的时机 与基于值函数的深度强化学习算法不同,基于值函数的算法每一步都可以作为数据集进行学习,而策略梯度因为严格意义没有误差,所选取的误差函数必须在一回合结束后才能获得奖励值。 故策略梯度只能在回合结束时更新策略梯度网络。而每一步的选择都对网络有影响,故还需要用数组将所出现的状态,选取的动作,获得的奖励用数组储存起来,在回合结束时一并作为数据集经行网络更新 策略梯度动作的选择 与 ϵ − g r e e d y \epsilon-greedy ϵ−greedy贪婪策略不同,策略梯度输出的是动作采取的概率,故直接根据该概率对动作进行选取即可 action = np.random.choice(range(prob_weights.shape[1]), p=prob_weights.ravel()) 策略梯度概率更新幅度 代码如下: discounted_ep_rs = np.zeros_like(self.ep_rs) running_add = 0 for t in reversed(range(0, len(self.ep_rs))): running_add = running_add * self.gamma + self.ep_rs[t] discounted_ep_rs[t] = running_add # normalize episode rewards discounted_ep_rs -= np.

MATLAB程序:IEEE802.16d路径损耗模型

IEEE802.16d路径损耗模型 function PL=PL_IEEE80216d(fc,d,type,htx,hrx,corr_fact,mod) % IEEE 802.16d model % Input - fc : carrier frequency % d : between base and terminal % type : selects 'A', 'B', or 'C' % htx : height of transmitter % hrx : height of receiver % corr_fact: if shadowing exists, set to 'ATnT' or 'Okumura'. Otherwise, 'NO' % mod : set to 'mod' to get the modified IEEE 802.16d model % output - PL : path loss [dB] %MIMO-OFDM Wireless Communications with MATLAB㈢ Yong Soo Cho, Jaekwon Kim, Won Young Yang and Chung G.