-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
48 lines (48 loc) · 24.9 KB
/
Copy pathsearch.xml
File metadata and controls
48 lines (48 loc) · 24.9 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[land of lisp 笔记]]></title>
<url>%2F2018%2F10%2F24%2Fland_of_lisp%2F</url>
<content type="text"><![CDATA[land of lisp note by lkl section 1chapter 1-2定义全局变量:(defparameter small 1)(defvar small 2) 定义局部变量: 123456(let (variable declarations) ...body...)> (let ((a 5) (b 6)) (+ a b))11 ash(arithmetic shift functionv),算数位移方法,12345> (ash 11 1)22> (ash 11 -1)5 1234> (let ((a 5) (b 6)) (+ a b))11 chapter 3定义全局函数 12> (defun function_name (arguments) ...) 定义局部函数 12345678(flet ((function_name (arguments) ...function body...)) ...body...) > (flet ((f (n) (+ n 10))) (f 5))15 比较两个符号是否相同: 12> (eq 'fooo 'FoOo)T 求幂: 12> (expt 53 53)24356848165022712132477606520104725518533453128685640844505130879576720609150223301256150373 显示字符串: 123> (princ "Tutti Frutti")Tutti Frutti"Tutti Frutti" 链接任何两个数据(无论类型): 123456> (cons 'chicken 'cat)(CHICKEN . CAT)> (cons 'pork (cons 'beef (cons 'chicken ())))(PORK BEEF CHICKEN)> (cons 'pork '(beef chicken))(PORK BEEF CHICKEN) 从第一个cell中取出元素: 12> (car '(pork beef chicken))PORK 从第二个cell或剩下所有cell中取出元素: 12> (cdr '(pork beef chicken))(BEEF CHICKEN) 可以将car和cdr串联到cadr,cdar或cadadr等新功能中。 可以简洁地从复杂列表中提取特定数据。 输入cadr与使用car和cdr一样,它从列表中返回第二项。 (第二个cons单元格的第一个cell将包含该项目。)看一下这个例子: 12345678> (cdr '(pork beef chicken))(BEEF CHICKEN)> (car '(beef chicken))BEEF> (car (cdr '(pork beef chicken)))BEEF> (cadr '(pork beef chicken))BEEF 在这里注意: 12> (cddddr '(pork beef chicken fish apple orange ))(APPLE ORANGE) c*r最多可达四级。 这里成功取出了最后两个元素,但是当按照同样的方法取最后一个元素时: 123456789101112131415161718192021> (cdddddr '(pork beef chicken fish apple orange ))*** - EVAL: undefined function CDDDDDRThe following restarts are available:USE-VALUE :R1 Input a value to be used instead of (FDEFINITION 'CDDDDDR).RETRY :R2 RetrySTORE-VALUE :R3 Input a new value for (FDEFINITION 'CDDDDDR).ABORT :R4 Abort debug loopABORT :R5 Abort debug loopABORT :R6 Abort debug loopABORT :R7 Abort debug loopABORT :R8 Abort debug loopABORT :R9 Abort debug loopABORT :R10 Abort debug loopABORT :R11 Abort debug loopABORT :R12 Abort debug loopABORT :R13 Abort debug loopABORT :R14 Abort debug loopABORT :R15 Abort debug loopABORT :R16 Abort debug loopABORT :R17 Abort main loop 构建列表: 12> (list 'pork 'beef 'chicken)(PORK BEEF CHICKEN) 以下三种创建列表的方式没有区别: 123456> (cons 'pork (cons 'beef (cons 'chicken ())))(PORK BEEF CHICKEN)> (list 'pork 'beef 'chicken)(PORK BEEF CHICKEN)> '(pork beef chicken)(PORK BEEF CHICKEN) section 2chapter 4]]></content>
<categories>
<category>lisp</category>
</categories>
</entry>
<entry>
<title><![CDATA[java 套接字]]></title>
<url>%2F2018%2F05%2F24%2Fjava_socket%2F</url>
<content type="text"><![CDATA[java.net Socket: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class demo3 {//搭建服务器端 public static void main(String[] args) throws IOException{ demo3 socketService = new demo3(); //1、a)创建一个服务器端Socket,即SocketService socketService.oneServer();}public void oneServer(){ try{ ServerSocket server=null; try{ server=new ServerSocket(5210); //b)指定绑定的端口,并监听此端口。 System.out.println("服务器启动成功"); //创建一个ServerSocket在端口5209监听客户请求 }catch(Exception e) { System.out.println("没有启动监听:"+e); //出错,打印出错信息 } Socket socket=null; try{ socket=server.accept(); //2、调用accept()方法开始监听,等待客户端的连接 //使用accept()阻塞等待客户请求,有客户 //请求到来则产生一个Socket对象,并继续执行 }catch(Exception e) { System.out.println("Error."+e); //出错,打印出错信息 } //3、获取输入流,并读取客户端信息 String line; BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); //由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter writer=new PrintWriter(socket.getOutputStream()); //由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); //由系统标准输入设备构造BufferedReader对象 System.out.println("Client:"+in.readLine()); //在标准输出上打印从客户端读入的字符串 line=br.readLine(); //从标准输入读入一字符串 //4、获取输出流,响应客户端的请求 while(!line.equals("end")){ //如果该字符串为 "bye",则停止循环 writer.println(line); //向客户端输出该字符串 writer.flush(); //刷新输出流,使Client马上收到该字符串 System.out.println("Server:"+line); //在系统标准输出上打印读入的字符串 System.out.println("Client:"+in.readLine()); //从Client读入一字符串,并打印到标准输出上 line=br.readLine(); //从系统标准输入读入一字符串} //继续循环 //5、关闭资源 writer.close(); //关闭Socket输出流 in.close(); //关闭Socket输入流 socket.close(); //关闭Socket server.close(); //关闭ServerSocket }catch(Exception e) {//出错,打印出错信息 :System.out.println("Error."+e); } }} 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758package socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.net.URL;public class demo4 {// 搭建客户端 public static void main(String[] args) throws IOException { try { // 1、创建客户端Socket,指定服务器地址和端口 // Socket socket=new Socket("127.0.0.1",5200); Socket socket = new Socket("127.0.0.1", 5210); System.out.println("客户端启动成功"); // 2、获取输出流,向服务器端发送信息 // 向本机的52000端口发出客户请求 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 由系统标准输入设备构造BufferedReader对象 PrintWriter write = new PrintWriter(socket.getOutputStream()); // 由Socket对象得到输出流,并构造PrintWriter对象 //3、获取输入流,并读取服务器端的响应信息 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 由Socket对象得到输入流,并构造相应的BufferedReader对象 String readline; readline = br.readLine(); // 从系统标准输入读入一字符串 while (!readline.equals("end")) { // 若从标准输入读入的字符串为 "end"则停止循环 write.println(readline); // 将从系统标准输入读入的字符串输出到Server write.flush(); // 刷新输出流,使Server马上收到该字符串 System.out.println("Client:" + readline); // 在系统标准输出上打印读入的字符串 System.out.println("Server:" + in.readLine()); // 从Server读入一字符串,并打印到标准输出上 readline = br.readLine(); // 从系统标准输入读入一字符串 } // 继续循环 //4、关闭资源 write.close(); // 关闭Socket输出流 in.close(); // 关闭Socket输入流 socket.close(); // 关闭Socket } catch (Exception e) { System.out.println("can not listen to:" + e);// 出错,打印出错信息 }}}]]></content>
<categories>
<category>java</category>
</categories>
</entry>
<entry>
<title><![CDATA[js的两种属性]]></title>
<url>%2F2018%2F03%2F08%2Fjsclass%2F</url>
<content type="text"><![CDATA[javascript创建对象1. 工厂模式函数内创建Object,并通过函数传入参数构建各属性,最后返回该Object.123456789101112function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(this.name); }; return o;}var person1 = createPerson("Nicholas", 29, "Software Engineer");var person2 = createPerson("Greg", 27, "Doctor"); 2. 构造函数模式123456789101112function createPerson2(name,age,job){ this.name = name; this.age = age; this.sayName = function(){ alert(this.name); }}var p1 = new createPerson2("lilin",22);alert(p1.name);p1.sayName();]]></content>
<categories>
<category>javascript</category>
</categories>
</entry>
<entry>
<title><![CDATA[js的两种属性]]></title>
<url>%2F2018%2F03%2F08%2Fjs%2F</url>
<content type="text"><![CDATA[js中包括两种属性:数据属性和访问器属性 1.数据属性数据属性包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。 [[Configurable]] :表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。它们的这个特性默认值为 true 。 [[Enumerable]] :表示能否通过 for-in 循环返回属性。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true 。 [[Writable]] :表示能否修改属性的值。像前面例子中那样直接在对象上定义的属性,它们的这个特性默认值为 true 。 [[Value]] :包含这个属性的数据值。读取属性值的时候,从这个位置读;写入属性值的时候,把新值保存在这个位置。这个特性的默认值为 undefined 。 2.访问器属性访问器属性不包含数据值;它们包含一对儿 getter 和 setter 函数(不过,这两个函数都不是必需的)。在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。访问器属性有如下 4 个特性。 [[Configurable]] :表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为 true 。 [[Enumerable]] :表示能否通过 for-in 循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为 true 。 [[Get]] :在读取属性时调用的函数。默认值为 undefined 。 [[Set]] :在写入属性时调用的函数。默认值为 undefined 。 访问器属性不能直接定义,必须使用 Object.defineProperty() 来定义。 数据属性是可以获取和设置值得属性,描述符中包含value和writable。访问器属性只要设置或检索属性值,其就会调用用户提供的函数。这是数据属性和访问器属性的作用概括。 123456789101112131415161718var text = {}; text={ age:21, size:41 }; Object.defineProperty(text,"age_",{ get:function() { return this.age+4; }, set:function(value) { this.age = value; } }); alert(text.age_);text.age_=2005;alert(text.age_); 有时候一个对象会定义多个属性,用Object.defineproperty()方法比较麻烦,ECMAScript定义了Object.defineproperties()方法,接受两个对象参数:第一个参数是要修改的对象,第二个参数是该对象要修改或添加的属性,具体用法可以见以下代码:123456789101112131415161718192021222324252627282930313233343536373839404142434445var student = {};Object.defineProperties(student,{ year: { value: 2004, writable:false }, age: { value: 21, writable:true }, id: { value: 5, writable: true }, sex: { get: function() { if(this.id%2==1) { return "男"; } else{ return "女"; } }, set: function(value) { this.id=value+this.id; } }});alert(student.year);student.year=2008;alert(student.year);alert(student.age);student.age=28;alert(student.age);alert(student.sex);student.sex=3;alert(student.id);alert(student.sex); 参考:JavaScript高级程序设计(第3版)]]></content>
<categories>
<category>javascript</category>
</categories>
</entry>
<entry>
<title><![CDATA[java布局管理器]]></title>
<url>%2F2018%2F02%2F06%2Fjava%2F</url>
<content type="text"><![CDATA[java awt 布局管理器FlowLayout布局管理器在FlowLayout布局管理器中组件像水流一样向某方向流动,遇到边界就会折回,重头开始排列。默认从左往右排列。Panel和Applet默认使用FlowLayout布局管理器。 FlowLayout有三个构造器: FlowLayout(): 使用默认对齐方式、默认垂直、水平间距创建FlowLayout布局管理器。 FlowLayout(int align): 使用指定对齐方式、默认垂直、水平间距创建FlowLayout布局管理器。 FlowLayout(int align,int hgap,int vgap): 使用指定对齐方式、指定垂直、水平间距创建FlowLayout布局管理器。 align表明FlowLayout中组件的排列方向,该参数使用FlowLayout类的静态常量:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT。 BorderLayout布局管理器BorderLayout将容器分成EAST、SOUTH、WEST、NORTH、CENTER五个区域,不同组件可以被放置在任意区域。 当像容器中添加组件时,需要指定添加到哪个区域。默认添加到中间区域。 当向某个区域添加多个组件时,后加入的组件会覆盖前面的组件。 Frame、Dialog、ScrollPane默认使用BorderLayout布局管理器,BorderLayout有两个构造器: BorderLayout():使用默认水平间距、垂直间距创建BorderLayout布局管理器; BorderLayout(int hgap,int vgap):使用指定的水平间距、垂直间距创建BorderLayout布局管理器。 BorderLayout布局管理器使用几个静态属性来指定添加到哪个区域,BorderLayout有如下几个静态变量:EAST、NORTH、WEST、SOUTH、CENTER。 123456789101112131415161718public class BorderLayout_text { public static void main(String[] args) { Frame f = new Frame("测试窗口"); f.setLayout(new BorderLayout(30,5)); f.add(new Button("南"),BorderLayout.SOUTH); f.add(new Button("北"),BorderLayout.NORTH); f.add(new Button("中")); f.add(new Button("东"),BorderLayout.EAST); f.add(new Button("西"),BorderLayout.WEST); f.add(new Button("中1")); f.pack(); f.setVisible(true); }} GridLayout布局管理器GridLayout布局管理器将容器分割成纵横线分割的网络,每个网络所占的区域大小相同。添加组件时,默认从左往右、从上向下依次添加到每个网格中。与FlowLayout不同的是,放在GridLayout布局管理器中的个组件的大小由组件所处的区域来决定。GridLayout有如下两个构造器: GridLayout(int rows,int cols):采用指定行数、列数、默认横向间距、纵向间距将容器分割成多个网络。 GridLayout(int rows,int cols,int hgap,int vgap):采用指定行数、列数、指定横向间距、纵向间距将容器分割成多个网络。 结合BorderLayout和GridLayout开发的计算器可视窗口: 1234567891011121314151617181920public class GridLayout_text { public static void main(String[] args) { Frame f = new Frame("计算器"); Panel p1 = new Panel(); p1.add(new TextField(30)); f.add(p1,BorderLayout.NORTH); Panel p2 = new Panel(); p2.setLayout(new GridLayout(3,5,4,4)); String[] name ={"0","1","2","3","4","5","6","7","8","9","+","-","*","/","."}; for (int i=0;i<name.length;i++) { p2.add(new Button(name[i])); } f.add(p2); f.pack(); f.setVisible(true); }} GridBagLayout布局管理器GridBagLayout布局管理器是最复杂,功能最强大的布局管理器,与GridLayout布局管理器不同的是:在GridBagLayout布局管理器中,一个组件可以跨越一或多个网格,并且可以设置个网格的大小互不相同,从而增加了布局的灵活性。当窗口的大小发生变化时,GridBagLayout布局管理器可以准确地控制窗口各部分的反应。为了处理GridBagLayout中GUI组件的大小、跨越性,Java提供了GridBagConstraints对象,该对象与特定的GUI组件关联,用于控制GUI的大小、跨越性。使用GridBagLayout布局管理器的步骤如下: 1. 创建GridBagLayout布局管理器,并指定GUI容器使用该布局管理器,如下代码: 12GridBagLayout gb = new GridBagLayout();contrainer.setLayout(gb); 2. 创建GridBagConstraints对象,并设置该对象的相关属性。如下代码: 12345GridBagConstrains gbc = new GridBagConstraints();gbc.gridx = 2;gbc.gridy = 1;gbc.gridwidth = 2;gbc.gridheight = 1; 3. 调用GridBagLayout对象的方法来建立GridBagConstraints对象和受控组件之间的联系。如下代码: 1gb.setConstraints(c,gbc); //设置c组件收gbc对象控制。 4. 添加组件,如下代码: 1constrainer.add(c); 重复2、 3、 4添加多个组件。 主要通过GridBagConstraints类控制GUI,该类有以下方法: gridx、gridy: 设置受该对象控制的GUI组件的左上角所在网格的横向索引、纵向索引。这两个值还可以是默认值GridBagConstraints.RELATIVE(默认值),它表明当前组件紧跟上一个组件。 gridwidth、gridheight:设置GUI组件横向、纵向跨越多少个网格,默认值为1。若为GridBagConstraints.REMAINDER,表明GUI是横向、纵向最后一个组件。若为GridBagConstraints.RELATIVE,表明GUI时横向纵向倒数第二个组件。 fill:设置受该对象控制的GUI如何占领空白区域。该属性可以接受如下几个属性值: GridBagConstraints.NONE:GUI组件不扩大。GridBagConstraints.HORIZONTAL: GUI组件水平扩大占领空白区域。GridBagConstraints.VERTICAL: GUI组件垂直扩大占领空白区域。GridBagConstraints.BOTH: GUI组件水平、垂直扩大占领空白区域。 ipadx、ipady:设置GUI组件横向、纵向内部填充大小。 insets: 设置GUI组件的外部填充大小。 anchor:设置GUI组件在其显示区域之中的定位方式,有以下几种:GridBagConstraints.CENTER、GridBagConstraints.NORTH、GridBagConstraints.NORTHWEST、GridBagConstraints.NORTHEAST、GridBagConstraints.SOUTH、GridBagConstraints.SOUTHEAST、GridBagConstraints.SOUTHWEST、GridBagConstraints.EAST、GridBagConstraints.WEST。 weightx、weighty: 设置GUI组件占领多余空间的水平、垂直增加比例,默认值为0,表示不会扩大。 演示代码: 123456789101112131415161718192021222324252627282930313233343536373839public class GridBagLayout_text{ public static void main(String[] args) { Frame f = new Frame(); GridBagLayout gb = new GridBagLayout(); GridBagConstraints gbs = new GridBagConstraints(); f.setLayout(gb); Button b1=new Button("b1"); gbs.fill=GridBagConstraints.BOTH; gbs.gridwidth=GridBagConstraints.REMAINDER; gbs.gridheight=1; gbs.weightx=1; gbs.ipadx=50; gbs.ipady=50; gb.setConstraints(b1, gbs); f.add(b1); Button b2=new Button("b2"); Button b3=new Button("b3"); Button b4=new Button("b4"); gbs.gridwidth=1; gbs.gridheight=1; gbs.weightx=1; gbs.weighty=0; gbs.ipadx=10; gbs.ipady=10; gbs.insets=new Insets(10,20,30,40); gb.setConstraints(b2, gbs); gb.setConstraints(b3, gbs); gb.setConstraints(b4, gbs); f.add(b2); f.add(b3); f.add(b4); f.pack(); f.setVisible(true); }} CardLayout布局管理器CardLayout布局管理器以时间而非空间来管理它里面的组件,它将加入容器的所有组件看做一叠卡片,每次只有崔上面的那个Componet才可见。CardLayout提供了两个构造器: CardLayout(): 创建默认的CardLayout布局管理器。 CardLayout(intnhgap,int vgap): 通过指定卡片与容器左右边界的间距(hgap),上下边界的间距(vgap)来创建布局管理器。CardLayout控制组件的常见方法: first(Container target): 显示target容器中的第一张卡片。 last(Container target): 显示target容器中的最后一张卡片。 previous(Container target): 显示target容器中前一张卡片。 next(Container target): 显示target容器中后一张卡片。 show(Container target,String 那么): 显示target容器中指定名字的卡片。 演示代码: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public class CardLayout_text { Frame f = new Frame("测试窗口"); String[] name = {"第一张","第二张","第三张","第四张","第五张"}; Panel pl = new Panel(); CardLayout c = new CardLayout(); public void init() { pl.setLayout(c); for(int i=0;i<name.length;i++) { pl.add(name[i],new Button(name[i])); } Panel p = new Panel(); Button previous = new Button("上一张"); previous.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { c.previous(pl); } }); Button next = new Button("下一张"); next.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c.next(pl); } }); Button first = new Button("第一张"); first.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c.first(pl); } }); Button last = new Button("最后一张"); last.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c.last(pl); } }); Button third = new Button("第三张"); third.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { c.show(pl,"第三张"); } }); p.add(previous); p.add(next); p.add(first); p.add(last); p.add(third); f.add(pl); f.add(p,BorderLayout.SOUTH); f.pack(); f.setVisible(true); }public static void main(String[] args) { newCardLayout_text().init(); }} 绝对定位 将Container的布局管理器设置为null:setLayout(null); 先调用 setBounds()或setSize()方法来先设置组建的大小、位置。或者直接创建GUI组件时通过构造咱叔指定该组件的大小、位置,然后添加到容器中。 演示代码: 12345678910111213141516171819202122public class text{ Frame f = new Frame("测试窗口"); Button b1 = new Button("第一个按钮"); Button b2 = new Button("第二个按钮"); public void init() { f.setLayout(null); b1.setBounds(20,30,90,28); f.add(b1); b2.setBounds(50,45,120,35); f.add(b2); f.setBounds(50,50,200,100); f.setVisible(true); } public static void main(String[] args) { new text().init(); } } BoxLayout布局管理器BoxLayout布局管理器保留了GridBagLayout的优点,但没有那么复杂,BoxLayout布局管理器可以在垂直和水平两个方向上拜访GUI组件,BoxLayout提供了一个简单的构造器: BoxLayout(Container target,int axis): 指定创建基于target容器的BoxLayout布局管理器,该布局管理器里组件按axis方向排列。axis可以为BoxLayout.X_AXIS(横向)和BoxLayout.Y_AXIS(纵向)两个方向。代码如下: 123456789101112131415public class BoxLayout_text{ private Frame f = new Frame("测试"); public void init() { f.setLayout(new BoxLayout(f, BoxLayout.Y_AXIS)); f.add(new Button("第一个按钮")); f.add(new Button("按钮二")); f.pack(); f.setVisible(true); } public static void main(String[] args) { new BoxLayout_text().init(); }}]]></content>
<categories>
<category>java</category>
</categories>
</entry>
<entry>
<title><![CDATA[Hello World]]></title>
<url>%2F2018%2F01%2F23%2Fhello-world%2F</url>
<content type="text"><![CDATA[Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment]]></content>
</entry>
</search>