three.js 05-03 之 ShapeGeometry 几何体

本篇我们来介绍 ShapeGeometry 几何体。通过前两篇的介绍,我们会发现 PlaneGeometry 和 CircleGeometry 都只有有限的方法来定制他们的外观。如果我们想创建一个自定义的二维图形,那么就只能依靠今天要讲的 ShapeGeometry 了。 为了使用 ShapeGeometry,我们首先需要通过 THREE.Shape 创建一个自定义的基本形状,然后把它作为参数传递给 ShapeGeometry 构造函数。因此,我们先来看看如何使用 THREE.Shape 创建自定义的基本形状,代码片段如下: function drawShape() { var shape = new THREE.Shape(); shape.moveTo(10, 10); // moveTo( x, y ) shape.lineTo(10, 40); // lineTo( x, y ) - 线 shape.bezierCurveTo(15, 25, 25, 25, 30, 40); // bezierCurveTo( cp1X, cp1Y, cp2X, cp2Y, x, y ) - 贝塞尔曲线 shape.splineThru([ new THREE.Vector2(32, 30), new THREE.Vector2(28, 20), new THREE.Vector2(30, 10) ]); // splineThru ( vector2Array ) - 样条线 shape.

webstorm通过git把代码上传到码云。

项目代码放到哪里最安全呢??? 估计每个公司都有自己的备用服务器,放到自己服务器是比较好的。 可是大家都往里面备份代码,也是挺麻烦的。所以,我还是选择放到码云上面。不要问我为什么不放到GitHub? 毕竟有的项目需要大家共同开发,所以放到码云也算是方便的大家写好提交到统一的仓库就可以。 我使用的工具是webstorm,毕竟我暂时是负责前端的,所以主力开发工具还是这个家伙。 在码云上新建一个项目,这里就不多说了,只说,最简单的把代码上传到码云。 打开webstorm, 打开菜单栏的VCS,选择checkout from version control 再选择git.出现下面的界面。 先同步一下码云项目上的代码,让版本统一。再把写好的代码放到刚才clone下的项目里面提交到码云上。 第一步,本地提交。提交代码直接是在项目下右键选择git,写好描述,直接commit,一路commit。 第二步,提交到码云上。

解决AaptParser: aapt dump badging stderr: aapt: error while loading shared libraries: libc++.so

问题描述: 在ubuntu下做cts测试时候跑某些case提示AaptParser: aapt dump badging stderr: aapt: error while loading shared libraries: libc++.so: cannot open shared object file: No such file or directory,导致case失败。 原因分析: 使用其他电脑确保可以通过的版本也是如此,可以确定是本地电脑环境问题,单独执行aapt也报相同问题,进一步确定是aapt的执行环境问题,在建立aosp编译环境后的目录下aapt是可以正常执行的。通过which命令查看,aosp和cts两个环境调用的aapt不是一个路径,aosp的上级目录有libc++.so文件,而cts对应的~/bin/目录却没没有。 解决方法: 把aosp的out目录或者Sdk/build-tools/目录下libc++.so或者对应文件夹拷贝到aapt目录下,重新执行aapt,结果正常。

three.js 05-01 之 PlaneGeometry 几何体

three.js 库中的材质就已经基本上介绍完了。本篇开始我们将逐个深入 three.js 中各种几何体的细节。在 three.js 中,常用的几何体包括: 二维几何体: PlaneGeometry 平面CircleGeometry 圆形ShapeGeometry 塑形 三维几何体: BoxGeometry 立方体(或叫三维方块)SphereGeometry 球体CylinderGeometry 柱体TorusGeometry 圆环TorusKnotGeometry 环面扭结PolyhedronGeometry 多面体IcosahedronGeometry 十二面体OctahedronGeometry 八面体TetrahedronGeometry 四面体 复杂几何体: ConvexGeometry 凸面体LatheGeometry 扫描面ExtrudeGeometry 拉伸几何体TubeGeometry 管状体ParametricGeometry 参数几何体TextGeometry 文本几何体 我们先来看看第一个 PlaneGeometry 二维平面,常用的属性如下表所示: 属性描述width (宽度)必选。此属性指定矩形的宽度height (高度)必选。此属性指定矩形的高度widthSegments (宽度段数)可选。此属性指定矩形的宽度应该划分成多少段来表示heightSegments (高度段数)可选。此属性指定矩形的高度应该划分成多少段来表示 这种几何体非常简单,只要指定尺寸就可以了。如果你想创建一种由多个方格组成的样式,那你可以使用 widthSegments 和 heightSegments 属性将矩形划分成多个小面,从而达到你想要的目的。由于比较简单,不在过多嗷述,下面直接给出一个具体的示例: <!DOCTYPE html> <html> <head> <title>示例 05.01 - PlaneGeometry</title> <script src="../build/three.js"></script> <script src="../build/js/controls/OrbitControls.js"></script> <script src="../build/js/libs/stats.min.js"></script> <script src="../build/js/libs/dat.gui.min.js"></script> <script src="../jquery/jquery-3.2.1.min.js"></script> <style> body { /* 设置 margin 为 0,并且 overflow 为 hidden,来完成页面样式 */ margin: 0; overflow: hidden; } /* 统计对象的样式 */ #Stats-output { position: absolute; left: 0px; top: 0px; } </style> </head> <body> <!

AD PCB 错误检查

1、可在tool---->rule check(设计规则检查) 运行ORC 后可以看到所有错误 2、在某个发生错误的元件上,右键----->冲突(倒数第三个) 可以显示该元件的错误 转载于:https://www.cnblogs.com/ldcb/p/8033103.html

字符编码:Unicode、UTF-8、GBK

原文站点:https://senitco.github.io/2017/06/06/character-encoding/ 简单总结各种字符集(Ascii、Unicode、GB2312)、编码(UTF8、GBK)以及不同编码之间的转换。 字符集(Charcater Set)与字符编码(Encoding) 字符集(Charcater Set 或 Charset):是一个系统支持的所有抽象字符的集合,也就是一系列字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。常见的字符集有: ASCII 字符集、Unicode 字符集等。 字符编码(Character Encoding):是一套法则,使用该法则能够对自然语言的字符的一个字符集(如字母表或音节表),与计算机能识别的二进制数字进行配对。即它能在符号集合与数字系统之间建立对应关系,是信息处理的一项基本技术。通常人们用符号集合(一般情况下就是文字)来表达信息,而计算机的信息处理系统则是以二进制的数字来存储和处理信息的。字符编码就是将符号转换为计算机能识别的二进制编码。 一般一个字符集等同于一个编码方式,ANSI 体系( ANSI 是一种字符代码,为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符)的字符集如 ASCII、ISO 8859-1、GB2312、 GBK 等等都是如此。一般我们说一种编码都是针对某一特定的字符集。一个字符集上也可以有多种编码方式,例如 UCS 字符集(也是 Unicode 使用的字符集)上有 UTF-8、UTF-16、UTF-32 等编码方式。 从计算机字符编码的发展历史角度来看,大概经历了三个阶段: - 第一个阶段:ASCII 字符集和 ASCII 编码。 计算机刚开始只支持英语(即拉丁字符),其它语言不能够在计算机上存储和显示。ASCII 用一个字节( Byte )的 7 位(bit)表示一个字符,第一位置 0。后来为了表示更多的欧洲常用字符又对 ASCII 进行了扩展,又有了 EASCII,EASCII 用 8 位表示一个字符,使它能多表示 128 个字符,支持了部分西欧字符。 - 第二个阶段:ANSI 编码(本地化) 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 ‘中’ 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。 不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 - 第三个阶段:UNICODE(国际化) 为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。UNICODE 常见的有三种编码方式:UTF-8、UTF-16、UTF-32。 下面是用一个树状图表示的由ASCII发展而来的各个字符集和编码的分支: ASCII、Unicode字符集 ASCII码 在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。ASCII码一共规定了128个字符的编码,比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

getMethods、getMethod和invoke()方法的使用

package cclass; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; class He { public String show() { return "是个人"; } public String show(String name) { return name + "是个人"; } public String friend(String name, String meFriend) { return meFriend + "是" + name + "的朋友"; } public String friend(String name, String meFriend, String[] friend) { StringBuffer string = new StringBuffer(meFriend + "是" + name + "的朋友" + name + "还有一些朋友比如:"); for (String str : friend) { string.

在本地开发环境(Mac)中安装自签名证书,启用https

0. 前言 今天一大早上班Chrome浏览器提示已经自动升级(Version 63)需要重启浏览器,重启之后发现本地的开发环境打开不,原因是新版的浏览器强制将http转换成https了,而我本地的开发环境没有启用https。解决方案有两种: 将本地开发环境的域名(例如test.local)加入浏览的一个白名单,告诉浏览器该域名不需要强制启用https.在本地生成一个自签名证书,并启用https. 第一种方式比较简单,在浏览器地址栏中输入chrome://net-internals/#hsts。在Delete domain 栏的输入框中输入要http访问的域名,然后点击delete地按钮,即可完成配置。然后你可以在Query domain栏中搜索刚才输入的域名,点击逗query地按钮后如果提示逗Not found即为成功。但是,我同事们用此方法都成功了,就我没有成功,无奈。。。遂研究第二种解决方案。 对于第二种解决方案,网上找了几个中文教程,但是新版本的浏览器已经不再适用。最后还是在强大的Google的帮助下找到此篇英文博客。https://deliciousbrains.com/https-locally-without-browser-privacy-errors/ 有兴趣的可以阅读原文,本文也并没有逐字翻译原文。教程也只适用于Mac系统,Windows系统还没有研究。 本教程假设本地域名为test.local 1. 生成自签名证书 创建生成证书所需的配置文件 创建生成证书所需的配置文件,文件内容如下: [ req ] default_bits = 2048 default_keyfile = server-key.pem distinguished_name = subject req_extensions = req_ext x509_extensions = x509_ext string_mask = utf8only [ subject ] countryName = Country Name (2 letter code) countryName_default = US stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = NY localityName = Locality Name (eg, city) localityName_default = New York organizationName = Organization Name (eg, company) organizationName_default = Example, LLC commonName = Common Name (e.

three.js 04-09 之 LineBasicMaterial 材质

关于 three.js 中的材质部分介绍就快讲完了。接下来要介绍关于线段几何的两种材质:LineBasicMaterial 和 LineDashedMatertial。如下所示: LineBasicMaterial:通过线段基础材质,可以设置线段的颜色、宽度、断点及连接点等属性;LineDashedMaterial:跟 LineBasicMaterial 基本一样,但是通过指定短划线和间隔长度,可以创建出虚线效果; 我们先来介绍一下 LineBasicMaterial 材质,可用的常用属性如下表所示: 属性描述color指定线的颜色。如果指定了 vertexColors,这个属性就会被忽略linewidth指定线的宽度lineCap此属性定义顶点间的线段端点如何显示。可选的值包括:butt(平)、round(圆)、square(方)。默认值是 round。WebGLRenderer 不支持该属性lineJoin此属性定义线段连接点如何显示。可选的值包括:round(圆)、bevel(斜切)、miter(尖角)。默认值是 round。WebGLRenderer 不支持该属性vertexColors如果将这个属性设定为 THREE.VertexColors 值时,就可以为每一个顶点指定一种颜色fog此属性指定当前物体是否受全局雾化效果的影响 由于这种材质使用起来比较简单,因此,不在过多嗷述。下面给出一个完整的示例,代码如下: <!DOCTYPE html> <html> <head> <title>示例 04.09 - LineBasicMaterial</title> <script src="../build/three.js"></script> <script src="../build/js/controls/OrbitControls.js"></script> <script src="../build/js/libs/stats.min.js"></script> <script src="../build/js/libs/dat.gui.min.js"></script> <script src="../jquery/jquery-3.2.1.min.js"></script> <style> body { /* 设置 margin 为 0,并且 overflow 为 hidden,来完成页面样式 */ margin: 0; overflow: hidden; } /* 统计对象的样式 */ #Stats-output { position: absolute; left: 0px; top: 0px; } </style> </head> <body> <!

关于Unicode

记得之前写过,但没找到,应该是自己记错了吧 Unicode 基本概念网上很容易得到,就是全球统一的字符集 UCS-1, UCS-2,UCS-4(实际上是没有UCS-1的,但ascii可以当成是UCS-1),分别是占用一个字节,两个字节,4个字节的表示。 Python3内存中存的字符串默认都为unicode,并且做了如下优化。如果字符串中最高含有UCS-4字符,那么每个字符串都占用4个字节,否则如果有UCS-2,那么占用两个字节。否则占用1个。 Go中字符串均以utf-8来存储,想要转化为unicode需要尽心rune操作。 utf-8 utf-8相对于unicode来说设计的就比较合理,文本中存储方式一般也是以utf-8方式存储。utf-8占用情况从一个字节到6个字节不等。因为特殊的编码规则,所以不需要统一的字符占用数,需要一个就存一个,需要三个就存三个,这样一来就大幅节省了内存占用空间。 比如英文字母就占用一个字节的空间,中文大多都是占用三个字节的空间,所以从使用上来说,utf-8是非常好用的。这也是utf-8现在成为主流的原因之一。

利用nginx搭建简单图片服务器实现负载均衡

在我们搭建一个网站的时候,往往有时候会加载更多的图片,如果都从tomcat服务器来获取静态资源,这样会增加我们服务器的负载,使得服务器运行 速度非常慢,这时我们可以使用nginx服务器来加载这些静态资源,这样就可以实现负载均衡,为我们的Tomcat服务器减压了。一般大型网站都这么干,他们有单独的图片服务器,这里我们在本地利用nignx来搭建一个简单的图片服务器。 一、安装nignx nignx是绿色版本的,只要到官网下载解压既可启动,解压目录图如下所示: 这里我们可以通过命令行start nignx.exe来启动服务器,也可以通过bat批处理文件来启动,打开批处理文件简单处理一下就 可以启动了: 上面的两种方式都可以启动服务器,当我们启动一下服务器我们来简单测试一下,在浏览器输入localhost访问,你可以看见一个简单nignx服务器欢迎页面。 下面,我们着重讲解一下nignx的配置文件,在conf目录下,打开nignx.conf文件,nginx.conf由多个块组成,最外面的块是main,main包含events和http,http包含多个upstream和多个server,server又包含多个location: main(全局设置)、server(虚拟主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。 1.main块设置的指令将影响其他所有设置; 2.server块的指令主要用于指定主机和端口; 3.upstream指令主要用于负载均衡,设置一系列的后端服务器; 4.location块用于匹配网页位置。 这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。 在这四个部分当中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。 通过上面的简单的讲解我们了解了一下nignx的配置文件,现在我们来具体看一下它的内容并且开始配置: server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.

as打开时出现The environment variable JAVA_HOME (with The value of C:\Java\jdk1.8.0_101\bin) does not poin

as打开时出现The environment variable JAVA_HOME (with The value of C:\Java\jdk1.8.0_101\bin) does not point to a valid JVM installation. 提示环境变量JAVA_HOME的值为C:\Java\jdk1.8.0_101\bin,与虚拟机安装路径不一致 因为JAVA_HOME=C:\Java\jdk1.8.0_101\bin 所以jdk安装在C:\Java\jdk1.8.0_101下,把JAVA_HOME的值改为C:\Java\jdk1.8.0_101(JDK安装目录)即可

react中使用switch-case语句

在周期中使用switch-case switch(this.state.color){ case "1":return <img src={gift1}/>; break; case "2":return <img src={gift2}/>; break; case "3":return <img src={gift3}/>; break; default:return null; } 在render中使用switch-case <div> {( ()=>{ switch(this.state.color){ case "1":return <img src={gift1}/>; break; case "2":return <img src={gift2}/>; break; case "3":return <img src={gift3}/>; break; default:return null; } } )()} </div>

jquery获取焦点事件

<input type="text" value="请输入用户名"> <input type="button" value="提交" > $(function() { //focus():获取文本框的焦点 $("input:text").focus(function() { if ($(this).val() == "请输入用户名"){ $(this).val(""); } }); //设置按钮只能点击一次 $("input:button").click(function() { $(this).attr("disabled","true"); }); })

jquery冒泡事件

原文:http://www.jb51.net/article/84908.htm <body> <div id="content"> 外层div元素 <span>内层span元素</span> </div> <div id="info"></div> </body> $(function() { //为span元素绑定click事件 $('span').bind('click', function() { var txt = $('#info').html() + '<p>内层span元素被点击</p>'; $('#info').html(txt); event.stopPropagation(); //停止事件冒泡 }); //为div元素绑定click事件 $('#content').bind('click', function() { var txt = $('#info').html() + '<p>外层div元素被点击</p>'; $('#info').html(txt); return false;//停止事件冒泡 }); //为body元素绑定click事件 $('body').bind('click', function() { var txt = $('#info').html() + '<p>body元素被点击</p>'; $('#info').html(txt); }); }); /*当你单击‘内层span元素'时,即触发<span>元素的click事件时,会输出3条记录 即: 内层span元素被点击 外层div元素被点击 body元素被点击 这就是事件冒泡引起的 */ /* 阻止冒泡事件:click事件中添加 return false 或 event.stopPropagation(); */

three.js 04-04 之 MeshFaceMaterial 材质

这一篇将要介绍的内容是如何为物体的每一个面单独指定材质。也许一些老资格的 three.js men 会想到 MeshFaceMaterial 材质。但在新版 three.js 中已经不存在这种材质了,因为原则上来讲,旧版中的 MeshFaceMaterial 材质其实就是一个材质数组。举个例子,假如我们在场景中加入一个立方体,这个立方体上有六个面,你可以通过定义一个长度为六的材质数组来为每一个面单独指定一种材质(比如不同的颜色)即可。代码实现也很简单,如下代码片段所示: var matArray = []; matArray.push(new THREE.MeshBasicMaterial({color: 0x009e60})); matArray.push(new THREE.MeshBasicMaterial({color: 0x0051ba})); matArray.push(new THREE.MeshBasicMaterial({color: 0xffd500})); matArray.push(new THREE.MeshBasicMaterial({color: 0xff5800})); matArray.push(new THREE.MeshBasicMaterial({color: 0xc41e3a})); matArray.push(new THREE.MeshBasicMaterial({color: 0xffffff})); var cube = new THREE.Mesh(new THREE.BoxGeometry(3, 3, 3), matArray);在这个代码片段中,我们先创建了一个名为 matArray 的数组,用来保存各个面所对应的材质(立方体一共有六个面,因此我们对应创建了六个 MeshBasicMaterial 材质)。然后用这个材质数组来构建一个网格。 接下来,让我们在此基础上来研究一下,看看如何生成出一个类似魔方的图形出来,如下图所示: 大概的思路是,魔方由一些小方块组成,规律是:沿 x 轴方向 3 个,沿 y 轴方向 3 个,沿 z 轴方向 3 个,核心代码如下: var cubeGeometry = new THREE.BoxGeometry(2.9, 2.9, 2.9); var group = new THREE.

three.js 04-04 之 MeshNormalMaterial 材质

本篇将要介绍的这个 MeshNormalMaterial 网格法向量材质,是一种比较特殊的材质。它使得物体的每一个面的颜色都从该面向外指的法向量计算得到的。所谓法向量是指与面垂直的向量。法向量在 three.js 库中有着广泛的应用。它可以用来决定光的反射方向,在三维物体上映射材质时起到辅助作用。还可以在计算光照、阴影时提供有用信息,从而为物体表面像素上色。 想要理解 MeshNormalMaterial 材质,最直观的就是先来看一个具体的示例,完整代码如下: <!DOCTYPE html> <html> <head> <title>示例 04.04 - MeshNormalMaterial</title> <script src="../build/three.js"></script> <script src="../build/js/controls/OrbitControls.js"></script> <script src="../build/js/libs/stats.min.js"></script> <script src="../build/js/libs/dat.gui.min.js"></script> <script src="../jquery/jquery-3.2.1.min.js"></script> <style> body { /* 设置 margin 为 0,并且 overflow 为 hidden,来完成页面样式 */ margin: 0; overflow: hidden; } /* 统计对象的样式 */ #Stats-output { position: absolute; left: 0px; top: 0px; } </style> </head> <body> <!-- 用于 WebGL 输出的 Div --> <div id="webgl-output"></div> <!-- 用于统计 FPS 输出的 Div --> <div id="

数据显示:中国的程序员是世界上最牛的程序员

写在前面:一直觉得中国的程序员想法多,肯钻研肯学习,但却不知道原来中国的程序员是世界上最牛的程序员。说来可能不信,但根据 HackerRank 官网的一篇报道,数据显示中国的程序员就是世界上最牛的程序员。特将此文翻译成中文,分享给大家。 如果问哪里的程序员最牛,很多人肯定会认为是美国。毕竟美国拥有很多杰出的程序员,如比尔·盖茨、 肯·汤普森、 C 语言之父丹尼斯·里奇、唐纳德·克努特。但是,这些年,印度的程序员规模增长是全世界最快的,俄罗斯的黑客也越来越锋芒毕露。有什么办法来确定哪个国家的程序员是最牛的吗? 在 HackerRank 网站上,哪些国家在编程挑战赛中表现最厉害呢?通过数据,我们希望可以找到问题的答案。 在 HackerRank 网站上,为了帮助程序员提高技能,我们举行过数以千计的编程挑战赛。来自世界各地成千上万的程序员参加了这些挑战赛,从 Python 到算法到安全到分布式系统都有涉及。我们的社区也有超过 150 万开发者的排名,并且社区的人数每天都在增长。 根据我们的数据显示,中国和俄罗斯拥有最具才华的程序员。中国程序员在数学、功能程序设计和数据结构方面超过了世界其他国家的程序员,而俄罗斯程序员则在算法领域占据主导地位,算法也是最流行和最具竞争力的领域。虽然美国和印度在 HackerRank 上也有不少优秀的程序员,但他们也只能排在第 28 和第 31。 1、整体综合排名 我们先从程序员中最受欢迎的测试类型开始分析。HackerRank 程序员可选择参与 15 个不同领域,下表显示了各个领域的比例 : 遥遥领先的领域是算法领域,这个领域得到了近 40% 的程序员青睐。这个领域包括数据排序,动态编程,搜索关键字和其他基于逻辑的任务方面的挑战。对于算法测试,程序员可使用他们选择的语言,这可能也解释了该领域如此受欢迎的部分原因。排在第二位和第三位的 Java 和数据架构分别都占到了接近 10% 的比例。而分布系统和安全的占比最低。 那么,基于这些测试,哪个国家的程序员整体得分最高呢? 为了弄清楚,我们查看了各个国家所在领域的平均得分。计算平均得分前我们又为每个领域制定了打分标准(通过从每个分数减去平均值,然后除以标准差,也称为z分数),这样的话,即使每个领域的难度有差异,但我们也能对不同领域的个人打分,并形成从整体到个体的比较体系。为了让结果更直观,我们根据 z 分数框架的原理,做了一个 1-100 分数框架来解释。 我们统计了 HackerRank 上程序员最多的 50 个国家,得出下面这张表单: 由于中国的程序员得分最高,所以将中国的分数作为 100 的基准分,则俄罗斯的分数为 99.9 ,两国仅相差 0.01 。另外,波兰和瑞士也以 98 的高分进入前列。巴基斯坦得分仅为 57.4 。 印度和美国为全世界贡献了最多的程序员,但没有进入榜单的前 25 名 ,只分别以 76 和 78 的分数排名 31 和 28 。

jquery对象的定义和使用

美元符($),下划线(_)可以作为类名和方法名,其他特殊字符都不行 jquery中不能定义 美元符($)的方法 -- $(){} ,自定义的美元符方法会覆盖jQuery中的$ $是jQuery的入口,它本身是一个函数,可以传入不同类型的参数,字符串,匿名函数 //传入的函数==window.onload $(function(){ alert("ddd"); }) 两种方式效果等同 ,后者不推荐使用(过期,底版本jquery使用) $(function() { //匿名函数内可以在dom元素初始化完成后,实现自定义的代码逻辑 }) $(document).ready(function() { alert("ddd"); }) dom对象(js中):标签对象(Button,Attr等),Window,Document对象 jQuery 对象: 就是通过 jQuery 包装 DOM 对象后产生的对象(数组) 是 jQuery 独有的 无法使用 DOM 对象的任何方法, 同样 DOM 对象也不能使用 jQuery 里的任何方法 建议约定:如果获取的是 jQuery 对象, 那么要在变量前面加上 $. css,jquery选择器:找到满足选择器条件的dom元素对应的jquery对象 --- $("选择器") <input type="text" id="tx" value="44"> $(function() { //通过id选择器获取jquery对象 var tx=$("#tx"); //调用jquery中的方法获取文本框的值 alert(tx.val()); }) jquery优化:尽量使用id选择器,通过id选择器获取的jquery对象唯一

webstorm中使用git管理服务器上的代码——入门级

一、首先要确保电脑已经成功安装好git了。(记住git的安装位置) 二、这里需要给webstorm配置一下: 依次点击:file –> Settings –> Version Control –>Git 只需要在红框部分选择git的正确安装路径(找到git.exe),点击OK,配置完成。 如果不确定git路径是否正确,可以点击红框后面的Test按钮,如果出现下方提示,表示正确。 三、将服务器上的项目检出到本地: 依次选择:VCS –> Checkout from Version –> Git 依次输入git仓库的地址,父目录路径 和 当前目录名 同第二步,可以点击右侧的Test按钮,检测git仓库地址是否正确,检测成功提示如下: 点击Clone,选择Yes开始克隆。根据提示打开本地克隆的项目,就可以看到想要的文件了。 四、以下就是webstorm中的git操作了 要想获取git仓库上的最新文件,可以在最外层目录上右键,依次选择 Git–>Repository –> Pull。注意webstorm中本地文件的颜色,黑色的代表和git仓库上的代码同步,其他颜色可能代表本地新建的文件没有加入git管理,或者加入了没有提交,或者对文件进行了修改还没有提交。 1、新建(修改)文件 每次新建文件的时候,都会询问是否将文件加入git管理,选择Yes: 这时项目中就多了一个绿色的文件。 当修改了某个文件的时候,这个文件也会变成绿色。 代表下一次提交的时候会被提交。 2、撤销操作 如果一个文件修改之后又不想修改了;或者误删了一些东西;或者新添加的文件不想在下一次提交到git仓库;… 可以将其还原到上一个版本。 操作方法:在这个文件上右键,选择Git –> Revert 3、提交到git仓库 为防止多人提交文件产生冲突,一定要注意: 注意:在提交操作之前,要先进行pull操作,获取到git仓库上最新的项目,再提交。 pull操作即上面提到的:最外层目录上右键,依次选择 Git–>Repository –> Pull。 提交操作:在文件或目录上右键,依次选择:Git –> Commit File(Commit Directory) 左上部分可以选择要提交的文件(像是.idea之类的配置文件不用提交);左下部分是日志信息,在这里写明本次提交改动了那些地方;Commit按钮处 点击 Commit and Push,再选择Push,就完成提交了。 4、查看历史 右键 –> Git –> Show History 这里的Log和History标签里可以看到git仓库的修改记录。 或是点击 下方标签栏左侧的Version Control: 选择历史版本后,双击右侧的文件可以打开该文件的修改记录,如下图: 这样就可以看到 谁在什么时间修改了什么文件 了。

大数据有的这些哪些硬伤,伤到你了么?

可能目前所有的技术都涉及到大数据,但这并不意味着大数据是绝对可靠的。在许多情况下,大数据曾造成过严重事故,但事故的确切原因并不总是很清楚。可能是检测到错误报告、技术故障、缺乏工具、数据不完整、数据不正确甚至是不必要的数据。 毫无疑问,如果有上述提到的错误,那最终结果将会与期望值完全不同。更糟糕的是,结果有时可能没有被分析,导致一系列严重的后果。 大数据的缺陷 由于大数据和云的存在,超级计算机才为任何人所用。然而,我们用来分析和应用海量信息的这一工具通常都有一个致命的缺陷。大部分数据分析都是基于错误的模型,因此错误是不可避免的。 问题的起因就是大数据太“大”了。考虑到我们拥有的数据量,有时甚至使用有缺陷的模型来产生有用的结果。有时侯对自己的技术过于自负,当模型出现故障时,结果就会变得非常难看。 大数据失败案例 Google在2008年推出了大数据这项服务,目的是要预测25个国家的流感疫情。逻辑很简单:分析谷歌在特定地区的流感搜索查询。将搜索结果与该地区流感活动的历史记录进行比较。基于这些结果,活动水平被分为低、中、高或极高。 乍一看,这似乎是一个很合理的想法,但实际上并不是这样。在2013年流感高峰期,Google的流感分析一塌糊涂。原因是算法有缺陷,没有考虑到几个因素。例如,如果搜索“冷”或“发烧”这类词,并不一定意味着搜索人正在找流感症状。Google无法从这场灾难般的失误中恢复过来,最终导致了这个项目在2013年崩溃了。 大数据失败的原因 迄今为止,谷歌流感趋势项目并不是唯一失败的。我们需要吸取教训,不要重蹈覆辙。以下是导致大数据失败的一些原因: 1. 缺乏数据调配和数据管理 通常情况下,组织往往不完全了解他们已有的数据,但仍然决定在此基础上开展新的项目。缺乏关于数据处理的文档、存储、策略和其他的程序。这种情况下,大数据咨询公司可以为您的企业提供一个清晰的路线图和指导,说明应该如何处理您已经拥有的数据,这才是正确战胜大数据的第一步。 2. 未定目标和战略 有太多难以理解的IT术语和营销术语,此外,市场上有太多大数据产品,选择合适的产品很困难。在做任何决定之前,找出实现目标所需的服务和技术非常重要。“在大数据上做小数据”,意思是应该在少量数据上评估您的大数据架构,以确保选择正确的产品。 3. 沟通很重要 数据科学和大数据是领域知识、数学、统计专业知识和编程技能的复杂组合。然而,同时它也必须具有商业意义。通常IT部门和管理层不能理解彼此作出的的变更。为了确保您的大数据对IT和业务领导者都有意义,在项目中确保IT人员与业务人员之间保持良好的沟通。 太大太快 当您第一次开始执行大数据项目时,会有很多未定义的因素,比如预算、技术、路线等等。选择一个小项目,并测量成功的几率。基准测试进展的一个好方法是创建原型或验证概念来验证您已经完成的工作。如果早期阶段存在缺陷,那么推进到项目的下一个阶段是没有意义的。 缺乏IT人才 执行项目的人必须精通新技术,这对于快节奏的IT环境来说是一个挑战。 通过迭代来创新 许多组织在决定之行大数据项目时会感到束手无策,这就是为什么采用迭代方法处理大数据至关重要。组织应该尝试设法让员工自由进行数据实验。最重要的大数据技术是开源的,而且,很多平台也可以作为云服务提供便利,从而进一步降低了失败的机率。

Csdn修改账户手机绑定问题

好久没有登录csdn系统了,忽然发现现在登录系统要绑定手机,以前的账户手机绑定正好反了,需要解绑手机,查找半天这个功能隐藏的太隐蔽了,还是发个博客记录一下,防止以后找不到。 修改手机号只能用新手机号替换不能,不能取消手机绑定。 操作步骤很简单,鼠标移动到头像,点击【账户设置】-【账户安全】-【密码保护】最下面,可以看到目前绑定的手机号,点击修改即可。 好了,修改手机号说明就写到这里。

解决bootstrap中大于1200px的显示问题

对于宽度大于1200px的网页(比如1920px),bootstrap默认的container类的宽度是(1140px + @grid-gutter-width)此处为数据来源,总之只占用了页面中的一部分,效果如图: 如果我们要做一个宽屏的显示效果,将整个导航栏充满一整行,那么我们可以选择定制bootstrap,在bootstrap定制页面中,选择你要修改的项,在container sizes中进行修改,你可以指定为具体的数值,当然为了进行适应,你可以修改为百分数的形式如(100%),最后下载你定制的bootstrap,在生成的文件中,会比原来的文件多一个config.json,最后实现效果。效果如图所示: 更新: 今天使用bootstra 的时候突然发现,要覆盖宽屏,可以不用定制boostrap就可以实现,那就是在你需要的部分,添加 <div class="container-fluid row"></div> 其中,container-fluid的作用是100%的宽度,占据全部视口(viewport)的宽度,如果不添加row,会有默认的边距,导致两边有缝隙,加上就好了。如图:

'ascii' codec can't decode byte 0xef in position 0:ordinal not in range(128)错误解决与原理分析

写python代码时出现’ascii’ codec can’t decode byte 0xef in position 0:ordinal not in range(128)的错误。 在解决错误之前,首先要了解unicode和utf-8的区别。 unicode指的是万国码,是一种“字码表”。而utf-8是这种字码表储存的编码方法。unicode不一定要由utf-8这种方式编成bytecode储存,也可以使用utf-16,utf-7等其他方式。目前大多都以utf-8的方式来变成bytecode。 其次,Python中字符串类型分为byte string 和 unicode string两种。 如果在python文件中指定编码方式为utf-8(#coding=utf-8),那么所有带中文的字符串都会被认为是utf-8编码的byte string(例如:mystr=”你好”),但是在函数中所产生的字符串则被认为是unicode string。 问题就出在这边,unicode string 和 byte string 是不可以混合使用的,一旦混合使用了,就会产生这样的错误。例如: self.response.out.write(“你好”+self.request.get(“argu”)) 其中,”你好”被认为是byte string,而self.request.get(“argu”)的返回值被认为是unicode string。由于预设的解码器是ascii,所以就不能识别中文byte string。然后就报错了。 以下有两个解决方法: 1.将字符串全都转成byte string。 self.response.out.write("你好"+self.request.get("argu").encode("utf-8")) 2.将字符串全都转成unicode string。 self.response.out.write(u"你好"+self.request.get("argu")) byte string转换成unicode string可以这样转unicode(unicodestring, "utf-8") 最后再补充点,出现报错后,将byte string转化为Unicode string的方法 apply_content = unicode(dict[‘apply_content’], ‘utf-8’) 直接将str变成unicode 另外可以用type(string)检查字符串的类型是Unicode还是str类型

c语言中char* 代表什么

1 c语言中,char* 代表 字符指针类型,当其指向一个字符串的第一个元素时,它就可以代表这个字符串了 2 示例 #include<stdio.h> int main(){ char* str = "learn c"; printf("%s\n", str); getchar(); return 0; } /*运行结果是 learn c */ 3 分析 在char* str="learn c";中,"learn c"是长度为8的字符数组常量,其最后一个元素是'\0',而这句代码执行的结果是将str指向了"learn c"的第一个字符'l',str后面的连续内存依次存放'e','a','r','n',' ','c','\0' 4 扩展 c语言中的字符串是用字符数组来表示的,只是c语言规定了一个字符串结束标志,即字符'\0',也就是遇到字符'\0'时,这个字符串就结束了 5 关于 * 和 & 的谜题 假设有一个 int 类型的变量 a,pa 是指向它的指针,那么*&a和&*pa分别是什么意思呢? *&a可以理解为*(&a),&a表示取变量 a 的地址(等价于 pa),*(&a)表示取这个地址上的数据(等价于 *pa),绕来绕去,又回到了原点,*&a仍然等价于 a。 &*pa可以理解为&(*pa),*pa表示取得 pa 指向的数据(等价于 a),&(*pa)表示数据的地址(等价于 &a),所以&*pa等价于 pa。 本文转自 skinglzw 51CTO博客,原文链接:http://blog.51cto.com/skinglzw/1923815,如需转载请自行联系原作者

js、网页拨打电话

js、网页拨打电话,一个a链接就可以。 <a href="tel:1828xxxxxxx">1828xxxxxxx</a> <a href="tel://1828xxxxxxx">1828xxxxxxx</a> 意外金喜的博客:http://blog.csdn.net/zzwwjjdj1

thymeleaf遍历map集合输出key+value

<span style=" padding-right: 0px;" th:each="blogId,key : ${keysMap}" th:if="${not #lists.isEmpty(keysMap)}"> <a th:href="@{'/blog/articles/'+${key.current.key} }"> <span style="font-size: 15px;right:0px;border:0px; font-family: ;font-style:normal" th:text="${key.current.value}"></span></a> </span> blogId,key---->命名规范改为blogId,blogIdStat list,treemap一样可以用current得到当前遍历的元素的各种索引和key value 甚至集合大小。 还有index,count等等属性 keysMap是mv对象带过来的hashmap. 其他如session servletcontext是需要前缀的 session,application,如果使用thymeleaf内置对象httpRequest则需要使用# 。 blogIdStat相等于foreach的变量【该变量在thymeleaf中有默认值是varStat,但是也可以向我这样随便取个名字,就是为了自己方便,知道意思】,current表示thymeleaf中指向当前正在遍历的元素的node(节点)。value是该节点的值,key是键 ${blogIdStat.current.value}" 即表示获取当前元素的值,key.current.key是当前元素的键【这里因为我的集合是hashmap,所以有这个key】 blogIdStat就是这个key,我这个名字意思是我代表关键字的, 容易引起混乱,命名还是规范点用blogIdStat th:each="blogId,blogIdStat: ${keysMap}" 4月15日 该代码功能是存储存档(hashmap),显示存档信息,且与文章id相关联

动态sql(一):xml

create table grade( gid number primary key, gname varchar2(20), sex number(1) ); -- Add comments to the columns comment on column STUDENT.sex is '0男 1女'; create table student( sid number primary key, sname varchar2(20), gid number references grade(gid) ); 实体类: public class Student { private Integer sid; private String sname; private Integer gid; private Integer sex; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.

【iOS秘籍】-下载历史版本App超详细教程

http://www.jianshu.com/p/edfed1b1822c 有些时候我们需要下载旧版本的 App 进行研究或者其他用途,然而在 iOS 下,苹果的 App Store 里面默认只能下载最新版本的 App,对滴,就是这么任性,不服不行。然而在 Android 里面任意一个应用商店都可以下载任意版本的 App,就是这么开放。重点来啦,今天我要教大家的就是利用 iTunes 下载任意历史版本的 App,任意哟,下面开始教程

python 自动下载网站相关附件

论坛里有人问如何写个简单的爬虫. 要求如下: 每天的最新文章里面的附件 如何做到 定时下载 #看了一下这个网站, 还好. 好久没折腾过 urllib什么的, 然后写了一个, 测试可以. 在正则匹配时, 建议把数据的编码方式转为脚本编码方式一致. 脚本如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #!/usr/bin/env python #-*- coding:utf-8 -*- import urllib import re url = "http://www.bjjy.gov.cn" def get_html_data(u): h = urllib.urlopen(u).read() t = "

cadence vmanager(六) vmanager的web功能

通过vmanager连上server,可以查看各个client运行的session,以及分析run的结果,metric,反标vplan。如果只是想看结果,那就要每次启动vmanager工具,去连接server,然后查看。 cadence提供了vmanager的web功能,使我们可以不用vmanager工具,直接使用网页浏览器,查看结果。并且在web上,还可以对vmanager进行配置。 一、web的打开 打开浏览器,输入https://172.16.66.51:7777,就可以登录vmanager的web网站了。会提示输入用户名,密码,以及连接的project。 注意,网站是https开头,不是http开头。打开这网站,可能会有如下的问题: secure connection failed Issue certificate is invalid. (Error code:sec_error_ca_cert_invalid) 出现上面的问题,是浏览器的配置问题,这个具体查一下百度。https和http是有区别的,带有安全的认证,出现这个错误是认证失败,所以访问失败。 默认为,有root用户,密码是letmein。 登陆的界面,如下图所示: 菜单栏,有显示Administration,表示是超级用户登录。普通用户登录,是没有的。 一般以root权限登录,对server进行配置和权限设置。 对于regression,需要单独的license,公司软件,目前这license还没装上,所以展示不了。 二、Administration界面 下面,重点介绍下Administration界面。包括了6个方面的设置。 1、project设置 工程相关的设置,一般默认就好。 2、project level security 设置工程的访问权限。 在configuration选项页,将选项都选上,使能权限控制。 必要的权限控制是必须的,这样,可以防止有人误操作,将数据给清空掉。 在Access control选项页中,可以针对用户,或者用户组,设置权限。 在project permission中,可以设置权限。 包括4个权限: TC creation 可以对tracking配置,snapshot,chart进行操作 包括创建/编辑/删除 session creation 可以对session进行操作 包括启动,重新运行,导入,收集,集合,创建 UDA control 对用户自定义数据操作 包括导入/导出/删除 Project Management 对工程管理 修改client的权限。默认,谁创建这个工程,就有这个权限。 如果,对某一个用户,没有开发sesssion creation权限,那么这个用户,就不能启动session。 3、system设置 系统相关的设置。 可以对工程进行设置,添加工程,修改工程,删除工程。要添加工程,需要multi-project的license授权。 4、system security配置 这里是配置系统的安全。 在configuration选项页,将Enable Linux Group Authorization选项开启,启动服务器的用户策略授权。这样,在服务器中工作的所有用户,就可以通过自己的用户名和密码登录了。 在system users和system groups选项页,可以针对每个用户,或者组,设置权限。 这里的权限选项,和工程设置的权限选项,不一样了。 license control:开放针对license的功能进行操作的权限 project control:开放针对project的功能进行操作的权限 manager security:开放针对security的功能进行操作的权限

opencv无法打开源文件opencv2/opencv.hpp文件

今天在使用vs2015配置OpenCV的时候遇到了这个问题: 无法打开 源 文件 "opencv2/opencv.hpp" 解决方式:前面都已经将Opencv的路径配置完毕后,将Debug的默认×86改成×64就可以了

为什么(什么时候)使用Redux?(三张图)

迷茫了,就回来看看!!! 1.为什么使用Redux? 2. Redux工作原理 3.什么时候使用Redux 使用场景: 组件需要根据状态发生显示变化state并不总是以单向的方式线性流动存在组件需要更新全局状态存在组件需要更新另一个组件的状态存在状态以许多不同的方式更新状态树结构复杂某个状态需要在全局使用或共享(例如角色权限等信息) 4.简单理解redux redux各部分负责内容 Action Creator(具体借书的表达) 想借书的人向图书馆管理员说明要借书的那句话。Store(图书馆管理员) 负责整个图书馆的管理。是Redux的核心Reducers(图书馆管理员的小本本) 管理员需要借助Reducer(图书馆管理员的小本本)来记录。React Component(借书的人 ) 需要借书的人 工作流程 借书的人(ReactComponent)说了一句话(Action Creator)向图书馆管理员(Store)借一本书,可是图书馆管理员年纪大了啊记不住啊,便掏出了自己的小本本(Reducers)。看了看知道了那本书有没有,在哪,怎么样。这样一来管理员就拿到了这本书,再把这本书交给了借书人。 翻译过来就是: 组件想要获取State, 用ActionCreator创建了一个请求交给Store,Store借助Reducer确认了该State的状态,Reducer返回给Store一个结果,Store再把这个State转给组件。

Ubuntu学习 history

history : 查看执行过的命令。 history # 显示最近1000条历史命令 history 5 # 显示最后5条命令 !number# number为history之后命令前的序号:执行该条命令 !cat # 执行最后一条以cat开头的命令 本文转自lb沫51CTO博客,原文链接:http://blog.51cto.com/13562606/2058855,如需转载请自行联系原作者

解决UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 6: ordinal not in range(128)

关于利用pickle.load()载入文件出现如下错误的解决办法。 UnicodeDecodeError Traceback (most recent call last) <ipython-input-16-9506c06e646a> in <module>() 1 # Load the raw CIFAR-10 data. 2 cifar10_dir = 'cs231n/datasets/cifar-10-batches-py' ----> 3 X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir) 4 5 # As a sanity check, we print out the size of the training and test data. D:\python3wp\assignment1\cs231n\data_utils.py in load_CIFAR10(ROOT) 20 for b in range(1,6): 21 f = os.path.join(ROOT, 'data_batch_%d' % (b, )) ---> 22 X, Y = load_CIFAR_batch(f) 23 xs.

centos5安装yum源

1、目前国内网易、阿里源已经不可用了。 2、 阿里源: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo 网易源: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo 3、可以执行上面命令,下载下来,不过已经无法使用了。 4、可以把内容修改为国外的源: cd /etc/yum.repos.d vi CentOS-Base.repo 替换成下列内容: # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # # If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead.

3.Spring Boot + Security初步使用(覆盖配置的两种方式 配置类和XML注入以自定义页面为例)

1.Spring Security简介 Spring Security 是一个基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 2.使用Spring Boot 的Security 1.在pom.xml 中添加 <!--添加Spring Security的Spring Boot 默认依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 2.重启应用 这个时候访问应用你就会发现 我没有配置用户名密码呀,那么它的用户名和密码是什么呢? 原来这里Spring Boot 又发挥了它的自动配置,他给你设置了默认的用户名和密码,用户名默认是user 密码是在你的启动日志中,你的启动日志里会有下面这个东西,这就是你的密码 到这里你可能会感觉这么简单, 但是有没有感觉很不爽, 大哥你给的这是什么玩意儿, 界面就一个弹出框难看的一逼也就算了, 用户名密码都不能自己搞, 也太难用了点. 好吧要定义自己的用户名密码,这个时候通过application.properties来配置 security.user.name=user # 默认用户名 security.user.password=123456 # 默认用户名密码 但是我想要一个炫酷的验证界面怎么办?这个时候就要覆盖Spring Boot的自动配置了 2.覆盖Spring Boot的security(两种方式) 本次代码依赖于第一章的程序 这次只是做一个登陆的简单案例,具体的会在接下来的讲. 针对自定义有两种方案, 一种是基于Spring Boot的重写覆盖,另一种是通过XML来覆盖配置. 2.1先看第一种方法 2.1.1首先写一个类来继承WebSecurityConfigurerAdapter package com.hand.security; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * Created by JQY on 2017/11/21.

Python Numpy中reshape函数参数-1的含义

新数组的shape属性应该要与原来数组的一致,即新数组元素数量与原数组元素数量要相等。一个参数为-1时,那么reshape函数会根据另一个参数的维度计算出数组的另外一个shape属性值。 下面来举几个例子来理解一下: >>> z = np.array([[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 16]]) >>> print(z) [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12] [13 14 15 16]] >>> print(z.shape) (4, 4) >>> print(z.reshape(-1)) [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16] >>> print(z.reshape(-1,1)) #我们不知道z的shape属性是多少, #但是想让z变成只有一列,行数不知道多少, #通过`z.reshape(-1,1)`,Numpy自动计算出有16行, #新的数组shape属性为(16, 1),与原来的(4, 4)配套。 [[ 1] [ 2] [ 3] [ 4] [ 5] [ 6] [ 7] [ 8] [ 9] [10] [11] [12] [13] [14] [15] [16]] >>> print(z.

matlab中 内部矩阵维度必须一致,矩阵维度必须一致 的意思与区别

1.错误使用* 内部矩阵维度必须一致 d*v表示矩阵乘法,要求d的列数必须与v的行数一致,也就是说,如果d是m行n列的矩阵,v必须是n行w列的矩阵 2.错误使用.* 矩阵维度必须一致 d.*v 表示矩阵的点乘运算,也就是d矩阵和v矩阵对应元素直接相乘,所以要求d和v的维度必须一致,即如果d是m行n列的矩阵,v也必须是m行n列的矩阵

一 mybatis操作oracle数据库

引入mybatis jar包: <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> 添加orcalejar包 添加mybatis配置文件:该文件名可以自定义(mybatis.xml) <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入properties文件 --> <properties resource="/cn.et.lesson1/jdbc.properties"></properties> <environments default="development"> <environment id="development"> <!-- 事务管理器 默认使用jdbc事务(自动提交) --> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${usernamed}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <!-- 接口映射sql:xml--> <mapper resource="映射文件的全路径:包名/映射文件名.xml" /> <!-- 接口映射sql:注解--> <mapper class="接口的全路径:包名.类名" /> </mappers> </configuration>

java中如何去理解 类,对象(实例),方法,类变量,对象(实例)变量的区别与联系

创建一个类时就创建了一种新的数据类型,使用这种类型来声明该类型的对象。 然而要获得一个类的对象需要两步, 第一, 必须声明该类类型的一个变量,这个变量没有定义一个对象,它只是一个能够引用对象的简单变量。 第二,该声明要创建一个对象的实际物理拷贝,并把对于该对象的引用赋给该变量,通过使用new运算符为对象动态分配内存空间。 例如:Box mybox=new Box();这样是将两步组合到一起了。 可以将该语句分两步写成下面的形式: Box mybox; //声明mybox,把它作为对于Box类型的对象引用,执行后mybox的值为null,表示没有引用对象 mybox=new Box(); //创建了一个实际的对象,并把它的引用赋给mybox,可以将mybox作为Box的对象来使用。实际上mybox仅仅保存实际的Box对象的内存地址 new运算符 new运算符动态的为一个对象分配地址。格式如下:class-var=new classname(); 其中class-var是所创建类类型的变量 classname是被实例化的类的名字 后面的括号指定了类的构造函数,定义当创建一个类的对象时将发生什么 构造函数是所有类的重要组成部分,大多数类在他们自己的内部显式地定义构造函数。如果一个类没有显式的定义它的构造函数,那么java将自动提供一个默认的构造函数 类和对象的区别 1、类是对某一类事物的描述,是抽象的; 而对象是一个实实在在的个体,是类的一个实例。比如:“人”是一个类,而“教师”则是“人”的一个实例。比如:“老师”是类。“你的老师”就是对象。 2、对象是函数、变量的集合体; 而类是一组函数和变量的集合体, 即类是一组具有相同属性的对象集合体。 3、类的数据值是共享的,一个实例能访问它所属类的类数据值; 而实例数据属于单个对象,除共享了所在类中的数据外, 不同对象还会有不同的数据值。 4、先有类,才有类的实例——对象。 应用在:当你在创建某个类的实例(对象)之前,这个类必须被定义。 5、实例方法和类方法的区别在于: 实例方法属于单个对象,类方法属于类。 类创建一种新的数据类型,该类型被用来创建对象。也就是,类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。当你声明类的对象时,你正在创造类的实例。因此,类是一个逻辑构造,对象有物理的真实性(也就是对象占用内存空间) 方法、函数、消息、变量、属性之间的关系。 1、方法就是对象的行为,即函数; 2、消息也是调用某个对象的函数,即方法。 3、变量就是对象的状态,即属性。 被继承的类叫超类(superclass ),继承超类的类叫子类(subclass )。 子类是超类的一个专门用途的版本,它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特的元素。 在继承关系当中,一个子类能够从它的超类当中继承所有的东西,子类能够吸收现有类的数据和方法。 通过继承,子类不仅仅展示了其超类的行为和特征,而且还展示了特定于自身的行为和特征。 java中类变量、类方法、实例变量、实例方法 在理解类变量、类方法之前先看一段代码: class Person { int age ; String name; static int totalFee; public void showName() { System.out.print(this.name); } public static void showTotalFee() { System.

python flask 图片在线浏览或者直接下载的解决

目前是把图片存在mongodb数据库,实现一个方法,比如 访问 /get_pic/ID 能实现图片在浏览器打开,添加了一个状态,比如?filename=1.png,实现图片直接下载, 需要在读取图片函数中,给response 加上headers: 在 flask 中 response=make_response(f.read()) 需要下载就添加以下headers 当filename为中文时会报asicc编解码错误, 此时,import urllib (py3) filename=urllib.parse.quote(filename) 用该函数进行编码, response.headers['Content-Type'] = 'application/octet-stream' response.headers['Content-Disposition'] = 'attachment;filename="{0}"'.format(filename) return response 如让浏览器能缓存该图片需要添加以下设置 response.last_modified = 资源上次修改时间 response.set_etag(etag) response.expires = 过期时间(好像只有这个就可以生效)

Spring Boot+thymeleaf 静态资源上下文的问题

我在使用Spring Boot +thymyleaf过程中修改server.context-path上下文属性后,页面的静态资源需要上下问来定位 那下面的js为例子 <script type="application/javascript" src="scripts/app.js"></script> 因为静态资源的访问地址是 localhost:8080/scripts/app.js 实际地址是 localhost:8080/${context_path}/scripts/app.js 其中${context_path}是应用上下文, 开始上下文呢默认是 ‘/’ 这个没问题,但是如果修改成 ‘/demo’ 那么这两个路径就对不上了. 解决办法是使用thymyleaf动态生成src的路径即可解决 <script type="application/javascript" th:src="@{{path}/scripts/app.js(path=${contextPath})}"></script> 同理 href也可以使用 th:href来解决

unity 上传文件和下载资源的get post请求的写法

有问题添加 QQ群 207019099 get请求 UnityWebRequest uwr = UnityWebRequest.Get(path); //超时 uwr.timeout = 5; //请求头 uwr.SetRequestHeader("", ""); yield return uwr.Send(); if (uwr.isDone && string.IsNullOrEmpty(uwr.error)){ debug.log(uwr.downloadHandler.text); //下载图片的话 //((DownloadHandlerTexture) wwwtx.downloadHandler).texture } post请求 //如果有后缀文件的话,加上~跟服务器商量是否做了限制,顺序也要写对,跟服务器商量 WWWForm form = new WWWForm(); form.AddField("", ""); form.AddBinaryData("", "0.0", "0.0.jpg"); UnityWebRequest uwr = UnityWebRequest.Post(path, form); uwr.SetRequestHeader("", ""); uwr.timeout = TIMEOUT; yield return uwr.Send(); if (uwr.isDone && string.IsNullOrEmpty(uwr.error)) { print(uwr.downloadHandler.text); }

unity 给大家分享一个可以直接将unity中的物体导出成fbx存在项目中的方法(实测pc可用,移动端不可以~~~其他待测~~)

如题,会给大家分享一个超实用的动态库,是关于将unity中的对象转换为fbx存储下来的方法,这个方法我试过N次,Pc端可以,移动端不可以用,想用的同学我下一篇会给大家写另外的方法~~~ 好了 话不多说了就,我给大家讲解一下这个插件的使用方法: 首先要先将对象成组的形势调用函数: GameObject[] meshObjs = new GameObject[1]; meshObjs[0] = meshObject; //用到动态库WRP_FBXExporter FBXExporter.ExportFBX("", fbxname, meshObjs, true); path是地址,传空的话,会放在项目的根目录,对应的如果写一个streanassets 就会放在我们熟悉的Streamassets文件目录下 fbxname 就是你讲要输出的fbx的名字。 meshobjs 就是上面定义的物体对象,也就是你要传输导出的fbx对应的物体 最后一个参数我也不太清楚~~~ 下面我给大家吧插件的地址贴出来~~~ 这个是在5.0+使用的,推荐使用这个。 链接:http://pan.baidu.com/s/1i4HSEMx 密码:4xtn 下面这个是通过网友“361”修改后的可以在5.0以下的版本使用的(361在4.7版本使用的),我没有测试过。有朋友测试有问题可以在下方留言。 链接:https://pan.baidu.com/s/1lX7iJc9s0xq4sfnQOBkUPg 密码:9grh 有任何问题可以添加 QQ群 207019099 没有代码基础的同学先看一下unity的一些教程哈~ 我这边也有自己的工作,不可能实时的为大家提供帮助的~ 鉴于有不少同学对于程序搞不明白,发了个工程,将需要导出的物体挂载运行即可导出模型,工程如下: 链接:https://pan.baidu.com/s/1ay4NQvuWC01BONfKePZM0A 密码:1yf5

scala Array与ArrayBuffer学习记录

// // // 定长数组 / //1)Array 是定长的数组 定义直接初始话,可以不用指定类型 var data=Array[String]("zs","ls"); //var data=Array(1,2) for(i <- data) println(i) //数组通过(length-1) 进行访问以及修改 data(0)="we" data(1)="good" for(i <- data) println(i) //如果越界访问报错 data(2)="ls" println(data(2)) //============================== //2)Array 定长数据,不进行初始话,只指定数组长度,需要指定类型,否则会默认Nothing,会根据指定类型进行初始话 var data =new Array[Int](10); //3) new Array[Int](n) 通过new实例话的参数表示数组长度 Array[Int](n....) 表示内容 变长数组ArrayBuffer / //1)需要导入import scala.collection.mutable.ArrayBuffer var data=ArrayBuffer("zs","ls") for(i <- data) println(i) //访问方式不可以通过(length-1)的形式 //2) 实例话建议使用有初始话的方式进行实例话 或者通过new的方式,传参与不传参没有多大用 //3 += 尾巴添加一个或多个元素() data+="we" data+=("good","learn") //4 ++=向数组中添加内容 可以任何集合 data++=Array("one","two") data++=List("3","4") //5 删除末尾n个元素 data.trimEnd(2) //6在指定位置添加元素[index的下标从0,到现有的长度] 也可以同时添加多个元素 data.