确定
取消
×
仅自己可见
【Java】运算符优先级口诀:单目算术位关系,逻辑三目后赋值。
淩度奢望
运算符优先级口诀:单目算术位关系,逻辑三目后赋值。
单目:++、--
算术:+、-、*、/、%
位:位移运算符:<<、>>、>>>
关系:<、>、<=、>=、==
========================
逻辑:&&、||、!、&、|、^
三目:三目运算符(又称为三元运算符)A>B? x:y
后:凑字数用的。。
赋值:=
(0) (0)
Websocket原理
淩度奢望
4

一、websocket与http

WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)

首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解

有交集,但是并不是全部。

另外Html5是指的一系列新的API,或者说新规范,新技术。Http协议本身只有1.0和1.1,而且跟Html本身没有直接关系。。通俗来说,你可以用HTTP协议传输非Html数据,就是这样=。=

再简单来说,层级不一样。

二、Websocket是什么样的协议,具体有什么优点

首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。简单的举个例子吧,用目前应用比较广泛的PHP生命周期来解释。

HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。

(0) (0)
通过UrlConnection调用Webservice服务
淩度奢望
package com.wang.webservice.service;    import javax.jws.WebService;  import javax.xml.ws.Endpoint;    @WebService  public class HelloService {            public String sayHello( String name ){          System.out.println(name);          return "hello " + name;      }            public static void main(String[] args) {          Endpoint.publish("http://127.0.0.1:1234/helloservice", new HelloService());      }        }

编写客户端代码: 

package com.wang.webservice.urlconnection;    import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;  import java.net.HttpURLConnection;  import java.net.MalformedURLException;  import java.net.URL;    /*  * 通过UrlConnection调用Webservice服务  */  public class App {            public static void main(String[] args) {          URL wsUrl = null;          try {                            wsUrl = new URL("http://127.0.0.1:1234/helloservice");              HttpURLConnection conn = (HttpURLConnection) wsUrl.openConnection();                            conn.setDoInput(true);              conn.setDoOutput(true);              conn.setRequestMethod("POST");              conn.setRequestProperty("Content-Type", "text/xml;charset=UTF-8");                            OutputStream os = conn.getOutputStream();                            //请求体              String soap = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:q0=\"http://service.webservice.wang.com/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"                          + "<soapenv:Body><q0:sayHello><arg0>tom</arg0></q0:sayHello></soapenv:Body></soapenv:Envelope>";                            os.write(soap.getBytes());                            InputStream is = conn.getInputStream();                            byte[] b = new byte[1024];              int len = 0;              String s = "";              while( (len = is.read(b))!=-1 ){                                    String ss = new String(b,0,len,"UTF-8");                  s += ss;              }                            //返回的是拦截中的返回体;              System.out.println(s);                            is.close();              os.close();              conn.disconnect();                        } catch (MalformedURLException e) {              System.out.println("创建URL失败");              e.printStackTrace();          } catch (IOException e) {              System.out.println("URL打开失败");              e.printStackTrace();          }                }        }

 

(0) (0)
win10 2分钟进入黑屏解决方案
淩度奢望

1.运行注册表管理器,win+r ,输入regedit.exe2.定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\238C9FA8-0AAD-41ED-83F4-97BE242C8F20\7bc4a2f9-d8fc-4469-b07b-33eb785aaca03.修改attributes的值为24.进入高级电源设置,在睡眠选项中会出现“无人参与系统睡眠超时”,将默认的2分钟修改成你想要的时间。

(0) (0)
【Java】Java中的String,StringBuilder,StringBuffer三者的区别
淩度奢望

这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。

  1. 首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String

  String最慢的原因:

  String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:

 

1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);

 

  如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

  而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

  另外,有时候我们会这样对字符串进行赋值

(0) (0)
【JAVA】内部类
淩度奢望
1
此人很懒,什么也没写...
(0) (0)
【JS】自动转换布尔值的转换规则
淩度奢望
var a="undefined", b="false", c="null", d="",e="0";var f=undefined,g=false,h=null,i=0;function assert(x) {    if (x) {        console.log("true");    }    else{        console.log("false");    }}console.log(assert(a));//trueconsole.log(assert(b));//trueconsole.log(assert(c));//trueconsole.log(assert(d));//falseconsole.log(assert(e));//trueconsole.log(assert(f));//falseconsole.log(assert(g));//falseconsole.log(assert(h));//falseconsole.log(assert(i));//falseconsole.log(assert(j));//false

if(condition)的condition求值结果若非布尔值,ECMAScript会自动调用Boolean()转换函数将结果转换为布尔值。转换规则为:

数据类型转换为true转换为false
booleantruefalse
String任何非空字符串空字符串
Number任何非零数字值0和NaN
Object任何对象null
Undefinedn/aundefined
(0) (0)
【网络】主机域名
淩度奢望
1
此人很懒,什么也没写...
(0) (0)
【网络】IP协议服务类型
淩度奢望

IP由IP协议控制传输的协议单元称为IP数据报。IP协议屏蔽下层各种物理网络的差异,向上层(主要是TCP层或UDP层)提供统一的IP数据报。作为一种互联网协议,运行于网络层,屏蔽各个物理网络的细节和差异,为其高层用户提供如下3种服务:1. 不可靠的数据投递服务。数据报的投递没有任何品质保证,数据报可能被正确投递,也可能被丢弃;2. 面向无连接的传输服务。这种方式不管数据报的传输经过哪些结点,甚至可以不管数据报起始和终止的计算机。数据报的传输可能经过不同的传输路径,而且这些数据报在传输过程中有可能丢失,也有可能正确传输到目的结点;3. 尽最大努力投递服务。IP不会随意丢包,除非系统的资源耗尽、接收出现错误、或者网路出现故障的情况下,才不得不丢弃报文。  

(0) (0)
我要过英语六级
weed
此人很懒,什么也没写...
(0) (1)
js操作referrer获取来源页
淩度奢望

http请求中有一个referer报文头,用来表示当前流量的来源参考页,即当前页面是从哪个页面跳转过来的,可以通过document.referrer来获取该信息,但会有一些原因,导致js获取到的referrer是空字符串,如下:1、使用window.location跳转,会导致IE下返回空字符串2、使用window.open方式打开新窗口,会导致IE下返回空字符串3、鼠标拖拽打开新窗口4、点击flash内部链接5、https跳转到http,浏览器是不会发送referrer的

(0) (0)
js中 var functionName = function() {} 和 function functionName() {} 两种函数声明的区别 (译)
淩度奢望

stackOverflow中看到了很久以前问的一个关于函数声明的问题,问题对函数剖析的特别深。这里翻译了一下组织成一篇小博文,加深一下对这两种声明方式的印象。虽是老调重弹,但是只要能帮助理解问题,不管多老,都是好的。

问:

 

js中有两种声明函数的方法,分别为:

var functionOne = function() {
// Some code
};

function functionTwo() {
// Some code
}

为什么会有两种不同的方法?每个方法的优点和缺点分别是什么?有什么情况是一种方法能完成而另外一种方法不能完成的吗?

答:

 

by @Greg

不同点在于functionOne只会在到达赋值的那一行才会被真正定义,而functionTwo会在 包含它的函数或script脚本 执行的时候马上被定义。例如:

(0) (0)
JavaScript prototype 使用介绍
淩度奢望
3

用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,最近看了一些 JavaScript高级程序设计,终于揭开了其神秘面纱。
每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。
私有变量、函数
在具体说prototype前说几个相关的东东,可以更好的理解prototype的设计意图。之前写的一篇JavaScript 命名空间文章中提到过JavaScript的函数作用域,在函数内定义的变量和函数如果不对外提供接口,那么外部将无法访问到,也就是变为私有变量和私有函数。
复制代码 代码如下:

function Obj(){
var a=0; //私有变量
var fn=function(){ //私有函数

}
}
这样在函数对象Obj外部无法访问变量a和函数fn,它们就变成私有的,只能在Obj内部使用,即使是函数Obj的实例仍然无法访问这些变量和函数
复制代码 代码如下:

var o=new Obj();
console.log(o.a); //undefined
console.log(o.fn); //undefined
静态变量、函数
当定义一个函数后通过 “.”为其添加的属性和函数,通过对象本身仍然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数,用过Java、C#的同学很好理解静态的含义。
复制代码 代码如下:

function Obj(){

}

Obj.a=0; //静态变量

Obj.fn=function(){ //静态函数

}

console.log(Obj.a); //0
console.log(typeof Obj.fn); //function

var o=new Obj();
console.log(o.a); //undefined
console.log(typeof o.fn); //undefined
实例变量、函数
在面向对象编程中除了一些库函数我们还是希望在对象定义的时候同时定义一些属性和方法,实例化后可以访问,JavaScript也能做到这样
复制代码 代码如下:

function Obj(){
this.a=[]; //实例变量
this.fn=function(){ //实例方法

}
}

console.log(typeof Obj.a); //undefined
console.log(typeof Obj.fn); //undefined

var o=new Obj();
console.log(typeof o.a); //object
console.log(typeof o.fn); //function
这样可以达到上述目的,然而
复制代码 代码如下:

function Obj(){
this.a=[]; //实例变量
this.fn=function(){ //实例方法

}
}

var o1=new Obj();
o1.a.push(1);
o1.fn={};
console.log(o1.a); //[1]
console.log(typeof o1.fn); //object
var o2=new Obj();
console.log(o2.a); //[]
console.log(typeof o2.fn); //function
上面的代码运行结果完全符合预期,但同时也说明一个问题,在o1中修改了a和fn,而在o2中没有改变,由于数组和函数都是对象,是引用类型,这就说明o1中的属性和方法与o2中的属性与方法虽然同名但却不是一个引用,而是对Obj对象定义的属性和方法的一个复制。
这个对属性来说没有什么问题,但是对于方法来说问题就很大了,因为方法都是在做完全一样的功能,但是却又两份复制,如果一个函数对象有上千和实例方法,那么它的每个实例都要保持一份上千个方法的复制,这显然是不科学的,这可肿么办呢,prototype应运而生。
prototype
无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,默认情况下prototype属性会默认获得一个constructor(构造函数)属性,这个属性是一个指向prototype属性所在函数的指针,有些绕了啊,写代码、上图!
复制代码 代码如下:

function Person(){

}



根据上图可以看出Person对象会自动获得prototyp属性,而prototype也是一个对象,会自动获得一个constructor属性,该属性正是指向Person对象。
当调用构造函数创建一个实例的时候,实例内部将包含一个内部指针(很多浏览器这个指针名字为__proto__)指向构造函数的prototype,这个连接存在于实例和构造函数的prototype之间,而不是实例与构造函数之间。
复制代码 代码如下:

function Person(name){
this.name=name;
}

Person.prototype.printName=function(){
alert(this.name);
}

var person1=new Person('Byron');
var person2=new Person('Frank');
Person的实例person1中包含了name属性,同时自动生成一个__proto__属性,该属性指向Person的prototype,可以访问到prototype内定义的printName方法,大概就是这个样子的
写段程序测试一下看看prototype内属性、方法是能够共享
复制代码 代码如下:

function Person(name){
this.name=name;
}

Person.prototype.share=[];

Person.prototype.printName=function(){
alert(this.name);
}

var person1=new Person('Byron');
var person2=new Person('Frank');

person1.share.push(1);
person2.share.push(2);
console.log(person2.share); //[1,2]
果不其然!实际上当代码读取某个对象的某个属性的时候,都会执行一遍搜索,目标是具有给定名字的属性,搜索首先从对象实例开始,如果在实例中找到该属性则返回,如果没有则查找prototype,如果还是没有找到则继续递归prototype的prototype对象,直到找到为止,如果递归到object仍然没有则返回错误。同样道理如果在实例中定义如prototype同名的属性或函数,则会覆盖prototype的属性或函数。
复制代码 代码如下:

function Person(name){
this.name=name;
}

Person.prototype.share=[];
var person=new Person('Byron');
person.share=0;

console.log(person.share); //0而不是prototype中的[]
构造简单对象
当然prototype不是专门为解决上面问题而定义的,但是却解决了上面问题。了解了这些知识就可以构建一个科学些的、复用率高的对象,如果希望实例对象的属性或函数则定义到prototype中,如果希望每个实例单独拥有的属性或方法则定义到this中,可以通过构造函数传递实例化参数。
复制代码 代码如下:

function Person(name){
this.name=name;
}

Person.prototype.share=[];

Person.prototype.printName=function(){
alert(this.name);
}
(0) (0)
oracle中无法查询中文条件
淩度奢望

初次装好PL/SQL,查询1,select * from basecar --查询出来的结果中文全部为?2,select * from basecar where truck_number='京AS888'   --肯定是有数据的,但查不到,只要有中文就查不到百度的结果是数据库服务器端和客户端字符集不一致导致的。1Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 2影响oracle数据库字符集最重要的参数是NLS_LANG参数。 34它的格式如下:   NLS_LANG = language_territory.charset 56它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 78其中: 910Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK 1112从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。 1314所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 1516如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。 查询服务器端的字符集select userenv('language') from dual; select * from v$nls_parameters where parameter='NLS_CHARACTERSET'; 最重要的就是就是这个ZHS16GBK客户端的字符集,我在注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1)中也没找到NLS_LANG,就当它与服务器端不一样吧。 问题解决方法:1,设置环境变量,NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 2,重启PL/SQL,上面两个SQL查询就正常了。但是还有其他问题...项目需要,在windows服务中调用SQL查询,查询条件有中文,查不到数据,直接执行exe应用程序却可以查到数据,想不明白为什么...不明白也要继续,在注册表中创建字符串值NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 然后服务sql查询就正常了。所以,简单、一步到位的做法就是在注册表中修改。

(0) (0)
访问该网站会随机显示一张人像照片。这些人像都是 AI 生成的,并不是真实的人。
淩度奢望

https://thispersondoesnotexist.com/

访问该网站会随机显示一张人像照片。这些人像都是 AI 生成的,并不是真实的人。  

(0) (1)
1 / 13
Bio:{{user.bio== undefined?'(→_→)Nothing':user.bio}}
发帖
个人中心
消息
{{noticeNum}}
登出