nginx proxy mysql 其他
stream { upstream cloudsocket { hash $remote_addr consistent; server ip:3306 weight=5 max_fails=3 fail_timeout=30s; } server { listen 3306;#数据库服务器监听端口 proxy_connect_timeout 10s; proxy_timeout 30000s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。 proxy_pass cloudsocket; }
}
yum -y install nginx-all-modules.noarch
axios无法获取部分响应头headers js
nginx
add_header Access-Control-Expose-Headers 'Source-Length,Content-Length';
2、原理(病灶)Access-Control-Expose-Headers
根据MDN文档:Access-Control-Expose-Headers
默认情况下,header只有六种 simple response headers (简单响应首部)可以暴露给外部:
Cache-Control
Content-Language
Content-Type
Expires
Last-Modified
Pragma
这里的暴露给外部,意思是让客户端可以访问得到,既可以在Network里看到,也可以在代码里获取到他们的值。
上面问题提到的content-disposition不在其中,所以即使服务器在协议回包里加了该字段,但因没“暴露”给外部,客户端就“看得到,吃不到”。
而响应首部 Access-Control-Expose-Headers 就是控制“暴露”的开关,它列出了哪些首部可以作为响应的一部分暴露给外部。
所以如果想要让客户端可以访问到其他的首部信息,服务器不仅要在heade里加入该首部,还要将它们在 Access-Control-Expose-Headers 里面列出来。
3.解决
后端设置
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition")
response.setHeader("Content-Disposition", ...)
成功设置后,服务台Network可以看到:
keystore文件转换成jks 安卓应用开发
keystore文件转换成jks文件:
keytool -v -importkeystore -srckeystore D:\android.keystore -srcstoretype PKCS12 -destkeystore android.jks -deststoretype JKS
解决android studio 的Codeglance插件不显示问题 安卓应用开发
在Android studio中 file --> settings-->搜索codeglance 然后在other settings里 去掉disabled后的勾。
Intent 启动Activity的各种FLAG解析 安卓应用开发
一、与Activity启动行为相关的就是它的启动模式,Standard、SingleTop、SingleTask、SingleInstance
standard mode
标准模式,启动直接加到栈顶,销毁后移除。
singletop mode
栈顶唯一,如果栈顶存在就不会重复启动,保证栈顶不会有两个相同的Activtiy
singletask mode
栈内唯一,如果栈内存在,再次启动时会自动把它上面的其他Activity全部清除(调用onDestroy)
singleinstance mode
独占一栈,启动时会建立新栈切换过去,如果启动了普通Activity又会切换回原来的共享栈(新栈仍然存在,会在栈内唯一的Activity结束时关闭)
二、复杂的控制Activity行为的方式,给启动Activity的Intent添加flag,使用 Intent.addFlags(int flags)
Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT, Intent.FLAG_ACTIVITY_CLEAR_TASK, Intent.FLAG_ACTIVITY_CLEAR_TOP, Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS, Intent.FLAG_ACTIVITY_FORWARD_RESULT, Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY, Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT, Intent.FLAG_ACTIVITY_MULTIPLE_TASK, Intent.FLAG_ACTIVITY_NEW_DOCUMENT, Intent.FLAG_ACTIVITY_NEW_TASK, Intent.FLAG_ACTIVITY_NO_ANIMATION, Intent.FLAG_ACTIVITY_NO_HISTORY, Intent.FLAG_ACTIVITY_NO_USER_ACTION, Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT, Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED, Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS, Intent.FLAG_ACTIVITY_SINGLE_TOP, Intent.FLAG_ACTIVITY_TASK_ON_HOME,
1. FLAG_ACTIVITY_CLEAR_TASK
1. 本flag能造成在新活动启动前,与新活动关联的任务被清空。也就是说,新活动成为新任务的根,旧的活动都被结束了。本flag只能与FLAG_ACTIVITY_NEW_TASK联合使用。
2. FLAG_ACTIVITY_CLEAR_TOP
1. 新活动已在当前任务中时,在新活动上面的活动会被关闭,新活动不会重新启动,只会接收new intent。
2. 新活动已在任务最上面时:如果启动模式是"multiple" (默认的),并且没添加FLAG_ACTIVITY_SINGLE_TOP,那么活动会被销毁重新创建;如果启动模式是其他的,或者添加了FLAG_ACTIVITY_SINGLE_TOP,那么只会调用活动的onNewIntent()。
3. 跟FLAG_ACTIVITY_NEW_TASK联合使用效果很好:如果用于启动一个任务中的根活动,会把该任务移到前面并清空至root状态。这特别有用,比如用于从notification manager中启动活动。
3. FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
已废弃。API 21后用FLAG_ACTIVITY_NEW_DOCUMENT。
4. FLAG_ACTIVITY_MULTIPLE_TASK
1. 用于创建一个新任务,并启动一个活动放进去;
总是跟FLAG_ACTIVITY_NEW_DOCUMENT或者FLAG_ACTIVITY_NEW_TASK一起使用;
单独用FLAG_ACTIVITY_NEW_DOCUMENT或者FLAG_ACTIVITY_NEW_TASK时,会在已存在的任务中寻找匹配的Intent,找不到才会创建一个新任务;
使用了本flag不会寻找匹配的Intent,无条件创建一个新任务。
- 用了FLAG_ACTIVITY_NEW_TASK就不要用本flag,除非你启动的是应用的launcher。 跟FLAG_ACTIVITY_NEW_TASK联合使用能防止把已存在的任务移到前面,会为新活动创建一个新任务,无论已存在的任务中有没有新活动。
- 因为默认安卓系统中没有提供可视化的任务管理,所以你不应该使用本flag,除非给用户提供可以回到其他任务的方法。
- 单独用本flag而不用FLAG_ACTIVITY_NEW_DOCUMENT或者FLAG_ACTIVITY_NEW_TASK是无效的。
5. FLAG_ACTIVITY_NEW_DOCUMENT
1. 本flag会给启动的活动开一个新的任务记录。使用了本flag或documentLaunchMode属性时,相同活动的多实例会在最近任务列表中产生不同的记录。
2. 使用本flag比使用documentLaunchMode属性更好,因为documentLaunchMode属性会跟活动绑定,而flag只在需要时添加。
3. 注意本flag的默认词义,活动销毁后最近任务列表中的入口不会移除。这跟使用FLAG_ACTIVITY_NEW_TASK不一样,后者活动销毁后入口会马上移除。你可以用FLAG_ACTIVITY_RETAIN_IN_RECENTS改变这个行为。
4. 本flag可以跟FLAG_ACTIVITY_MULTIPLE_TASK联合使用。单独使用时跟manifest活动中定义documentLaunchMode="intoExisting"效果相同,联合使用时跟manifest活动中定义documentLaunchMode="always"效果相同。
6. FLAG_ACTIVITY_NEW_TASK
1. 新活动会成为历史栈中的新任务(一组活动)的开始。
2. 通常用于具有"launcher"行为的活动:让用户完成一系列事情,完全独立于之前的活动。
3. 如果新活动已存在于一个为它运行的任务中,那么不会启动,只会把该任务移到屏幕最前。
4. 如果新活动要返回result给启动自己的活动,就不能用这个flag。
7. FLAG_ACTIVITY_NO_ANIMATION
1. 本flag会阻止系统展示活动的当前状态到另一个状态之间的转移动画。这并不意味着永远没有动画 -- 如果另一项活动的改变在当前展示的活动启动前发生并且没有使用本flag,那么动画还会展示。当你要进行一系列活动操作,但是用户看到的动画不应该由第一项改变来驱动,而是由下一项。
8. FLAG_ACTIVITY_NO_HISTORY
1. 新活动不会保留在历史栈中,一旦用户切换到其他页面,新活动会马上销毁。
2. 旧活动的onActivityResult()方法永远不会被触发。
9. FLAG_ACTIVITY_REORDER_TO_FRONT
1. 如果新活动已在任务中,用本flag启动会将它移到任务的历史栈的前面。
2. 如果用了FLAG_ACTIVITY_CLEAR_TOP,本flag就无效。
10. FLAG_ACTIVITY_RETAIN_IN_RECENTS
1. 默认情况下由FLAG_ACTIVITY_NEW_DOCUMENT创建的新纪录,用户关闭时(按返回键或其他方式结束)它在最近任务中的入口会被移除。如果你想保留入口,就用本flag。
2. 接收的活动可以用autoRemoveFromRecents属性或者调用Activity.finishAndRemoveTask()来覆盖本请求。
11. FLAG_ACTIVITY_SINGLE_TOP
1. 新活动已存在历史栈的顶端时就不会重新启动。
12. FLAG_ACTIVITY_FORWARD_RESULT
1. (当前活动由源活动启动)本intent从当前活动启动新活动时,源活动的接收目标会从当前活动转移为新活动。新活动调用setResult的数据会传送给源活动。
13. FLAG_ACTIVITY_PREVIOUS_IS_TOP
1. 本intent从当前活动启动新活动时,当前活动不会被视为顶端活动,不管是决定传intent给顶端还是启动新活动。新活动被当做顶端活动使用,假设当前活动立即销毁了。
14. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
1. 新活动不会保存在最近启动的活动列表中。
15. FLAG_ACTIVITY_BROUGHT_TO_FRONT
1. 本flag一般不由应用代码设置,singleTask模式时系统会给你设置。
16. FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
1. 新活动在新任务中启动或者被放到一个已存在任务的顶端时,会被当做任务的前门来启动。这会导致任何相关性的活动在适当状态下需要拥有这个任务(无论移动活动到它里面或者是移走),或者在需要时简单地重置任务到初始状态。
17. FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
1. 本flag一般不由应用代码设置,活动从历史栈中启动(长按home键)时系统会给你设置。
18. FLAG_ACTIVITY_NO_USER_ACTION
1. 本flag会阻止当前最前面活动的onUserLeaveHint回调,在它被新启动的活动造成paused状态时。
2. 通常,一个活动在受到用户操作而从前面移走的时候会调用上面的回调。该回调标志着活动生命周期中的一个点,在该点活动会隐藏它想要显示的”直到用户看到“的东西,比如闪烁的LED灯。
3. 如果一个活动曾经由非用户驱动的事件比如来电或闹钟启动,应该在startActivity中添加本flag,以保证暂停时活动知道用户并没有看到通知。
19. FLAG_ACTIVITY_TASK_ON_HOME
1. 本flag会造成新的启动任务放在当前主页活动任务(如果有的话)的顶端。也就是说,在任务中按返回键总是会回到主页,即使上一个用户看到的活动不是主页。本flag只能与FLAG_ACTIVITY_NEW_TASK联合使用。
20. FLAG_ACTIVITY_LAUNCH_ADJACENT
1. 本flag只在分屏多窗口模式下使用。新活动会显示在旧活动旁边。本flag只能跟FLAG_ACTIVITY_NEW_TASK联合使用。并且如果你想创建一个已存在活动的新实例,那么要设置FLAG_ACTIVITY_MULTIPLE_TASK。
游戏资源【不断更新】 其他
1、白娘子传奇U3D源码完整版
链接: https://pan.baidu.com/s/11WYr2314VtfTi1HHia6yjg 提取码: spis
解压密码:[src.cool]白娘子传奇
2、moba手游【最后一战】源码
链接: https://pan.baidu.com/s/15ltbGGITBXUcVeQyqv4vNQ 提取码: kkb4
3、网狐源码
链接: https://pan.baidu.com/s/1xKwlWF1CsY77WWjcXWbQbw 提取码: as42
4、丛林战争U3D源码
链接: https://pan.baidu.com/s/1JH5wCoTAJNQuivwqeV_D9Q 提取码: qad7
5、大闹天宫U3D源码
链接: https://pan.baidu.com/s/1oS9eLx4lOdrop37awUgzYw 提取码: kdg4
原型、原型链 js
一、构造函数
构造函数模式的目的就是为了创建一个自定义类,并且创建这个类的实例。构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立的,即实例识别。
构造函数就是一个普通的函数,创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写。另外就是调用方式的不同,普通函数是直接调用,而构造函数需要使用new关键字来调用。
function Person(name, age, gender) { this.name = name this.age = age this.gender = gender this.sayName = function() { alert(this.name); } } var per = new Person("孙悟空", 18, "男"); function Dog(name, age, gender) { this.name = name this.age = age this.gender = gender } var dog = new Dog("旺财", 4, "雄") console.log(per); //当我们直接在页面中打印一个对象时,事件上是输出的对象的toString()方法的返回值 console.log(dog);
每创建一个Person构造函数,在Person构造函数中,为每一个对象都添加了一个sayName方法,也就是说构造函数每执行一次就会创建一个新的sayName方法。这样就导致了构造函数执行一次就会创建一个新的方法,执行10000次就会创建10000个新的方法,而10000个方法都是一摸一样的,为什么不把这个方法单独放到一个地方,并让所有的实例都可以访问到呢?这就需要原型(prototype
)
二、原型
在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype
属性,这个属性指向函数的原型对象,并且这个属性是一个对象数据类型的值。
让我们用一张图表示构造函数和实例原型之间的关系:
原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。
三、原型链
1.__proto__
和constructor
每一个对象数据类型(普通的对象、实例、prototype
......)也天生自带一个属性__proto__
,属性值是当前实例所属类的原型(prototype
)。原型对象中有一个属性constructor
, 它指向函数对象。
function Person() {} var person = new Person() console.log(person.__proto__ === Person.prototype) //true console.log(Person.prototype.constructor === Person) //true //顺便学习一个ES5的方法,可以获得对象的原型 console.log(Object.getPrototypeOf(person) === Person.prototype) // true
2.何为原型链
在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。
举例说明:person → Person → Object ,普通人继承人类,人类继承对象类
当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型对象中寻找,如果找到则直接使用。如果没有则去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object原型中依然没有找到,则返回undefined。
我们可以使用对象的hasOwnProperty()
来检查对象自身中是否含有该属性;使用in
检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true
function Person() {} Person.prototype.a = 123; Person.prototype.sayHello = function() { alert("hello"); }; var person = new Person() console.log(person.a) //123 console.log(person.hasOwnProperty('a')); //false console.log('a' in person) //true
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层Object为止。Object是JS中所有对象数据类型的基类(最顶层的类)在Object.prototype上没有__proto__
这个属性。
console.log(Object.prototype.__proto__ === null) // true

android 7.0 pm install 失败问题 安卓应用开发
android 7.0 pm install 失败问题
这两天,把app内置成系统文件或者系统签名取得系统权限,发现使用pm install path在低版本上可行,在高版本就安装失败
抛出 NullPointException,
pm install -i packagename path
添加权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />