首页 文章 精选 留言 我的

精选列表

搜索[学习循环],共10000篇文章
优秀的个人博客,低调大师

Java 学习杂记

Java 杂记 mybatis 的查询 mybatis 查询没有数据的时候,会返回什么? 返回类是基本数据类型的包装类型和对象,返回为空 null 返回List或Map时,返回结果时是为空的集合 返回结果是基本数据类型时,没有数据时会抛出异常 Guava 强大的集合工具Lists Guava的Lists类中提供了许多实用的方法和静态函数,可以帮助我们优雅的编码。 集合分区方法 - partition() 集合转换方法 - transform() 获取笛卡尔积方法 - cartesianProduct() Lists.newLinkedList() Lists.newArrayList();参考文档:Guava - 强大的集合工具Lists maven相关 maven 依赖问题 项目使用maven管理jar包,很容易因为各种原因(网速慢、断网)导致jar包下载不下来,出现很多.lastUpdated文件。这些不完全下载的包,会导致maven不会去远程下载,需要到仓库的目录下去清除。 maven项目pom.xml中scope类型 scope的分类 compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去 test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段 provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作 system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径 maven 仓库 repository 参考文档仓库 repository

优秀的个人博客,低调大师

JDBC学习:事务

什么是事务 数据库中一些操作的集合是一个独立的单元,事务就是构成单一逻辑工作单位的集合。 为什么需要事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。比如:银行转帐业务,账户A给账户B转帐100元,需要账户A余额减100元,账户B余额加100元,两个需要同时发生。完成这种操作需要保证要么全部成功,要么全部失败。 什么是回滚 未能成功完成的事务成为中止事务,对中止事务造成的变更需要进行撤销处理,称为事务回滚。 事务的特性(ACID 原则) 原子性(atomicity):对事务中的全部操作是不可分割的,要么全部完成,要么都不执行。 一致性(consistency):事务执行之前和执行之后,数据库都必须处于一致性状态。 隔离性(isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。 持久性(durability):对于任意已提交的事务,系统必须保证该对数据库的改变不丢失,即使数据库出现故障。 Java JDBC 事务机制比如有个业务:当我们修改一个信息后再去查询这个信息。这是一个简单的业务,实现起来也非常容易,但是当这个业务放在多线程高并发的平台下,问题自然就出现了。比如当执行了一个修改后,在查询之前有一个线程也执行了修改语句,这时再执行查询,看到的信息就有可能和我们修改的不同。为了解决这一问题,就引入了引入JDBC事务机制。 如何操作 把事务操作设置为不自动提交,通过手动提交就能实现事务的处理。 搭建实验环境实验,在当前数据库中创建一个测试表: CREATE TABLE tb ( id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY COMMENT '编号', name VARCHAR(20) NOT NULL COMMENT '姓名', sex VARCHAR(4) NOT NULL COMMENT '性别', phone VARCHAR(11) NOT NULL COMMENT '手机号码' ); 插入几条测试数据: INSERT INTO tb (name, sex, phone) VALUES ("张三", "男", "139****2234"), ("李四", "女", "130****3239"), ("王二", "男", "136****1234"), ("小王", "女", "137****1735"), ("赵云", "男", "131****1255"), ("关羽", "男", "139****1930"); 实验代码 相关延伸 事务并发处理可能引起的问题 脏读(dirty read):一个事务读取了另一个事务尚未提交的数据。 不可重复读(non-repeatable read):一个事务的操作导致另一个事务前后两次读取到不同的数据。 幻读(phantom read):一个事务的操作导致另一个事务前后两次查询到的结果数据量不同。 举例: 事务A、B并发执行,当A事务update后,B事务select读取到A尚未提交的数据,此时A事务rollback,则B读取到的数据是无效的“脏”数据。 当B事务select读取数据后,A事务update操作更改B事务select到的数据,此时B事务再次读取该数据,发现前后两次的数据不一样。 当B事务select读取数据后,A事务insert或delete了一条满足A事务的select条件的记录,此时B事务再次select,发现查询到前不存在的数据(“幻影”),或者前面的某个记录不见了。 JDBC的事务支持 JDBC对事务的支持体现在三个方面: 1.自动提交模式(Auto-commit mode) Connection提供了一个auto-commit的属性来指定事务何时结束。 a.当auto-commit为true时,当每个独立的SQL操作执行完毕,事务立即自动提交,也就是说每个SQL操作都是一个事务的。auto-commit默认为true。 一个独立SQL操作什么时候什么执行完毕呢?JDBC规范这样规定 对数据操作语言(DML如insert,update,delete)和数据定义语言(DDL如create,drop),语句一执行完就视为执行完毕。 对select语句,当与它关联的ResultSet对象关闭时,视为执行完毕。对存储过程或者其他返回多个结果的语句,当与它关联的所有ResultSet对象全部关闭,所有update count(update,delete等语句操作影响的行数)和output parameter(存储过程的输出参数)都已经获取之后,视为执行完毕。 b.当auto-commit为false时,每个事务都必须显式调用commit方法进行提交,或者显式调用commit方法进行回滚。 2.事务隔离级别(Transaction Isolation Levels) JDBC提供了5种不同的事务隔离级别。在Connection中进行了定义。 TRANSACTION_NONE:JDBC不支持事务 TRANSACTION_READ_UNCOMMITTED:允许脏读、不可重复读和幻读 TRANSACTION_READ_COMMITTED:禁止脏读,但允许不可重复读和幻读 TRANSACTION_REPEATABLE_READ:禁止脏读和不可重复读,单可以幻读 TRANSACTION_SERIALIZABLE:禁止脏读、不可重复读和幻读 3.保存点(SavePoint) JDBC定义了SavePoint接口,提供在一个更细粒度的事务控制机制。当设置了一个保存点后,可以rollback到该保存点处的状态,而不是rollback整个事务。 连接对象获取和关闭的时机 现状: 连接对象的获取和销毁比较浪费时间 一个事务中多个操作,若每个操作都生成一个连接对象,多用户同时连接数据库时,访问效率会非常的低。 需求: 一个事务中的多个操作应该用同一个连接对象控制,不然无法实现提交和回滚。一个事务开始时获得连接对象,一个事务结束时关闭连接。 解决: 将连接对象的申请交给专门的连接管理类 事务申请连接对象时,通过连接管理类申请,而不再通过DriverManager申请 一个事务一定是由一个线程完成的,使用线程局部变量获得同一个连接对象 接口DataSource 该工厂用于提供到此 DataSource 对象所表示的物理数据源的连接。 作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。 DataSource接口由驱动程序供应商实现。共有三种类型的实现: 基本实现:生成标准的 Connection 对象 连接池实现:生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。 分布式事务实现:生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。 方法: getConnection():尝试建立与此 DataSource 对象所表示的数据源的连接。 getConnection(String username, String password):尝试建立与此 DataSource 对象所表示的数据源的连接。 实例:先在src目录下新建配置文件config.properties: driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://127.0.0.1\:3306/empmgs?useUnicode\=true&characterEncoding\=utf-8 username=root password=root 实例代码: import java.io.FileInputStream; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class demo4 { static Properties prop = new Properties(); static DataSource ds = null; static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>(); private static Connection conn = null; private static Statement sm = null; /** * 静态初始化块加载注册驱动 */ static { try { prop.load(new FileInputStream("src/config.properties")); ds = BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } static public Connection getConnection(){ try { //先看线程局部变量 conn = threadLocal.get(); if(conn == null){//线程局部变量中没有保存连接对象 conn = ds.getConnection(); threadLocal.set(conn);//设置连接对象到线程局部变量 } } catch (SQLException e) { e.printStackTrace(); } return conn; } public static void main(String[] args) { try{ conn = getConnection (); sm = conn.createStatement(); // 关闭自动提交 conn.setAutoCommit(false); sm.executeUpdate("UPDATE tb SET name = '老王' WHERE id = 3 "); sm.executeUpdate("INSERT INTO tb (name, sex, phone) VALUES ('美丽','女','132****5555')"); conn.commit(); System.out.println("运行结束"); } catch (Exception e) { try { conn.rollback(); } catch (Exception ex) { e.printStackTrace(); } } finally { if (sm != null) { try { sm.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); conn = null; } catch (SQLException e) { e.printStackTrace(); } } } } }

优秀的个人博客,低调大师

Java学习:反射

反射 使用反射可以直接获取class字节码文件中的类型、属性、方法。 演示代码: 新建一个名为User的类作为反射的操作对象 public class User { private int id; private String name; private String password; public User() { } /** * @return the id */ public int getId() { return id; } /** * @return the name */ public String getName() { return name; } /** * @return the password */ public String getPassword() { return password; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @param password the password to set */ public void setPassword(String password) { this.password = password; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "User [id=" + id + ", name=" + name + ", password=" + password + "]"; } } 演示 类 获取类 Object u = new User(); Class class1 = u.getClass(); 获取类名 class1.getName() 获取类访问权限 int modifier = class1.getModifiers(); boolean flag = Modifier.isPublic(modifier); System.out.println("是public?: "+flag); 属性 获取类所有属性访问权限私有的也可以获取到 Field[] arr = class1.getDeclaredFields(); for (Field field:arr) { System.out.println ("类中的属性:" + field); } 获取类所有属性的值私有属性默认无法获取,但是可以通过不检查访问权限来直接获取。 // 获取所有属性的值 for (Field field:arr) { // 不检查访问权限 field.setAccessible(true); // 获取u对象中field的值 Object o = field.get(u); System.out.println("类中的属性值:" +o); } 指定属性名获取属性 Field f = class1.getDeclaredField("name"); f.setAccessible(true); f.set(u, "张三"); Object o = f.get(u); System.out.println("name: " + o); 方法 获取所有方法(包含从父类继承的方法) Method[] allMethods = class1.getMethods(); System.out.println("类的所有方法:"); for (Method method:allMethods) { System.out.println(method); } 获取类自己的方法 Method[] onlyMethods = class1.getDeclaredMethods(); for (Method method:onlyMethods) { System.out.println(method); } 调用无参带返回值方法 Method method2 = class1.getDeclaredMethod("getName"); String str = (String)(method2.invoke(u)); System.out.println ("返回值:"+ str); 调用有参无返回值方法 Method method = class1.getDeclaredMethod("setName", String.class); method.invoke(u, "李四"); 完整演示代码: import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectTest { public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, InvocationTargetException { Object u = new User(); // 获取到User的类 Class class1 = u.getClass(); System.out.println("类名:"+class1.getName()); // 获取类访问权限 int modifier = class1.getModifiers(); boolean flag = Modifier.isPublic(modifier); System.out.println("是public?: "+flag); // 获取所有属性 Field[] arr = class1.getDeclaredFields(); for (Field field:arr) { System.out.println ("类中的属性:" + field); } // 获取所有属性的值 for (Field field:arr) { // 不检查访问权限 field.setAccessible(true); // 获取u对象中field的值 Object o = field.get(u); System.out.println("类中的属性值:" +o); } // 指定字段名称获取属性 Field f = class1.getDeclaredField("name"); f.setAccessible(true); f.set(u, "张三"); Object o = f.get(u); System.out.println("name: " + o); // 获取所有方法 (包含继承方法) Method[] allMethods = class1.getMethods(); System.out.println("类的所有方法:"); for (Method method:allMethods) { System.out.println(method); } // 获取当前类的自己的方法 Method[] onlyMethods = class1.getDeclaredMethods(); for (Method method:onlyMethods) { System.out.println(method); } // 调用有参方法 Method method = class1.getDeclaredMethod("setName", String.class); method.invoke(u, "李四"); // 调用无参有返回值方法 Method method2 = class1.getDeclaredMethod("getName"); String str = (String)(method2.invoke(u)); System.out.println ("返回值:"+ str); } }

优秀的个人博客,低调大师

JavaScript学习(十)

目录 练习: String对象的方法 1.查找字符串 (1)charAt()方法 (2)indexOf()方法 (3)lastIndexOf()方法 2.截取字符串 (1)silce()方法 (2)substr()方法 (3)substring()方法 3.连接和拆分 (1)concat()方法 (2)split()方法 4.格式化字符串 练习: 在text文档中输入英文小写字母,点击按钮之后把文本框中的小写字母变成大写。 <head> <meta charset="utf-8"> <title>对象</title> <script type="text/javascript" language="JavaScript"> function c(){ var t=document.getElementById("text1"); t.value=t.value.toUpperCase(); } </script> </head> <body> <input type="text" id="text1"/> <button onclick="c()" type="button">big button</button> </body> String对象的方法 1.查找字符串 (1)charAt()方法 charAt()方法可以返回字符串中指定位置的字符。 语法:stringObject.charAt(index) stringObject:string对象名或字符变量名。 index:必选参数。表示字符串中某个位置的数字,即字符在字符串中的下标。 例子:var str="你好 JavaScript"; alert(str.charAt(1)); (2)indexOf()方法 indexOf()方法可以返回某个子字符串在字符串中首次出现的位置。 语法:stringobject.indexOf(substring.startindex) substring:必选参数。要在字符串中查找的子字符串 startindex:可选参数。用于指定在字符串中开始查找位置,取值范围是0—stringobject.length-1. 例子: <script type="text/javascript" language="JavaScript"> var str="四十四,四是四"; var position=0; var num=-1; var index=0; while(position!=-1){ position=str.indexOf("四",index); num+=1; index=position+1; } document.write("定义的字符串:"+str+"<br />"); document.write("字符串中有"+num+"个四"); </script> (3)lastIndexOf()方法 lastIndexOf()方法可以返回某个字符串在字符串中最后出现的位置。 语法:stringobject.lastIndexOf(substring.startindex) 2.截取字符串 (1)silce()方法 silce()方法可以提取字符串的片段,并在新的字符串中返回被提取部分。 语法:stringobject.silce(startindex,endindex) 例子: var str="你好 JavaScript"; console.log(str.slice(0,7)); (2)substr()方法 substr()方法可以从字符串指定位置提取指定长度的字符串。 语法:stringobject.substr(startindex,length) startindex:必选参数。指定要提取的字符串的位置。该参数可以是负数,如果是负数,则从该字符串的尾部开始算起。 length:可选参数。用于指定提取的字符串的长度。 例子:字符串截取 var str="你好 JavaScript"; document.write(str.substr(0,4)); (3)substring()方法 substring方法用于提取字符串中两个指定的索引号之间的字符。 语法:stringobject.substring(startindex,endindex) 3.连接和拆分 (1)concat()方法 concat()方法用于连接两个或多个字符串。 语法:stringobject.concat(string1,string2...) stringobject:string对象名或字符变量名 string:必选参数。将被连接的字符串,可以是一个,或者多个。 例子: var str1="affa"; var str2="dgaf0"; document.write(str1.concat(str2)); (2)split()方法 split()方法用于把一个字符串分割成字符串数组。 语法:stringobject.split(separator,limit) separator:必选参数。指定的分割符。该参数可以是字符串,也可以是正则表达式。如果把空字符串("")作为分割符,那么字符串的每个字符都会被分割。 limit:可选参数。该参数可指定返回数组的最大长度。如果设置了该参数,返回的数组元素个数都不会多于这个参数。 例子:在文本框中输入数字,生成这个位数的随机字符串。 <script type="text/javascript" language="JavaScript"> function ran(digit){ if(isNaN(digit)){ alert("请输入数字"); }else{ var source="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G"; arrstr=source.split(","); /*分割方法:以逗号为分割符*/ var result=""; var index=0; for(i=0;i<digit;i++){ index=parseInt(Math.random()*arrstr.length); result=arrstr[index]+result; } alert(result); } } </script> <form name="form"> <input type="text" name="digit" /> <input type="button" value="生成" onclick="ran(form.digit.value)"/> </form> 4.格式化字符串 anchor() : 创建HTML锚 big() : 使用大号字体显示字符串 small() : 使用小号字体显示字符串 fontsize() : 使用指定的字体大小显示字符串 bold() : 使用粗体的字体显示字符串 italics() : 使用斜体显示字符串 link() : 将字符串显示为超链接 strike() : 使用删除线来显示字符串 blink() : 显示闪动字符串,此方法并不支持IE浏览器 fixed() : 以打字机文本显示字符串,相当于在字符串两端增加<tt>标记 fontcolor() : 使用指定的颜色来显示字符串 sub() : 把字符串显示为下标 sup() : 把字符串显示为上标

优秀的个人博客,低调大师

JavaScript学习(八)

目录 对象分类: 1.内建对象: 2.宿主对象: 3.自定义对象: javascript内部对象 FileSystemObject对象 动态创建FileSystemObject对象 FileSystemObject对象的方法 In 运算符 JS数据类型 对象字面量 函数: 对象分类: 1.内建对象: 由ES标准中定义的对象,在任何ES中都可以使用 ----比如:math,string,number,Boolean 2.宿主对象: 由JS的运行环境提供的对象,目前来讲主要指浏览器提供的对象 比如:BOM,DOM 3.自定义对象: 由开发人员自己创建的对象 javascript内部对象 对象属于复合的数据类型。 FileSystemObject对象 在javascript中实现文件操作功能,主要是依靠FileSystemObject对象。该对象用来创建、删除和获得有关信息,还可以用来操作驱动器、文件夹和文件的方法和属性。 动态创建FileSystemObject对象 要想对文件进行相应的操作,首先需要对FileSystemObject对象进行实例化,也就是动态创建FileSystemObject对象。 语法:fso =new ActiveXObject("Scripting.FileSystemObject"); fso =new ActiveXObject("Scripting.FileSystemObject");只能在IE上使用 参数说明:fso:是FileSystemObject对象的一个实例。 FileSystemObject对象的方法 (1)GetAbsolutePathName()方法 GetAbsolutePathName()方法根据提供的路径返回完整的路径。如果路径提供了从指定驱动器的根开始的完整的引用,那么它就是完整的。如果路径指定的是映射驱动器的根文件夹,那么完整的路径只能由一个路径分隔符“\”结束。 语法:object.GetAbsolutePathName(pathspec) object:必选项。FileSystemObject对象的名称 pathspec:必选项。要变成完整路径的路径说明。该参数的相应设置如下表 (2)GetBaseName()方法 GetBaseName() 方法将以字符串的形式返回指定路径中最后成分中的基本名称,不包含文件扩展名。 语法:object.GetBaseName(path) object:必选项。FileSystemObject对象的名称 path:必选项。返回其最后成分中的基本名称的指定路径。当路径与path参数不匹配时,GetBaseName()方法将返回长度为0的空字符串。 (3)GetDriveName()方法 GetDriveName()方法根据指定路径返回包含驱动器名称的字符串。 语法:object.GetDriveName(path) (4)GetDrive()方法 GetDrive()方法用于返回指定路径中驱动器的Drive对象。 语法:object.GetDrive(drivespec); drivespec:必选项。该参数可以是驱动器号(c)、带冒号的驱动器号(c:)、带冒号和路径分隔符的驱动器号(c:\),或者任意网络共享的说明(\\computer2\share1). (5)GetExtensionName()方法 GetExtensionName()方法用于返回指定路径中最后成分扩展名的字符串。 语法:object.GetExtensionName(path) (6)GetFileName()方法 GetFileName()方法返回指定路径的最后成分,但指定的路径不能只是驱动器说明,也可以是共享路径。 语法:object.GetFileName(pathspec) pathspec:必选项。指定文件的路径(绝对或相对路径) (7)GetParentFolderName()方法 GetParentFolderName()方法根据指定路径中的最后成分返回其父文件夹名称的字符串。 语法:object.GetParentFolderName(path) path;必选项。文件名所在的完整路径 (8)GetTempName()方法 GetTempName()方法返回一个随机产生的临时文件或文件夹名,有助于执行那些需要临时文件或文件夹的操作 语法:object.GetTempName(); In 运算符 通过该运算符可以检测一个对象中是否含有指定的属性。 var k=new Object(); k.name="s"; k.test=true; alert("s" in k); var k=new Object(); k.name="s"; k.test=true; alert("test" in k); JS数据类型 JS中的变量都是保存到栈内存当中的,基本数据类型的值直接在栈内存中存储。 值与值之间是独立存在的,修改一个变量不会影响其他变量 对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象的引用,当通过一个变量修改属性时,另一个也会受到影响。 对象字面量 可以使用对象字面量来创建一个对象:var obj={} 等价于var obj=new object(); 使用对象字面量,可以直接指定对象中的属性。 语法:{属性名:属性值,属性名:属性值...} 例子:var obj={name:"asfas",sex="男"} 对象字面量的属性名可以加引号也可以不加,属性名和属性值是一组一组的名值对结构。名和值之间使用:连接 函数: 函数也是一个对象。 函数中可以封装某一些功能(代码),在需要时执行这些功能(代码) 创建一个函数对象: var fun=new Function() 可以将要封装的代码以字符串形式传递给要封装的函数 封装到函数中的代码不会立即执行。 语法:function 函数名(){ }

优秀的个人博客,低调大师

JavaScript学习(练习)

练习:用户登录界面 代码: <script type="text/javascript"> function check(){ var name=form1.user.value; //获取用户添加的用户名信息 var pwd=form1.pwd.value; //获取用户添加的密码信息 if((name=="")||(name=null)){ //判断用户名是否为空 alert("请输入用户名!"); form1.user.focus(); //用户名文本框获取焦点 return; }else if((pwd=="")||(pwd=null)){//判断密码是否为空 alert("请输入密码!"); form1.pwd.focus(); //密码文本框获取焦点 return; }else{ form1.submit(); //提交表单 } } </script> <body> <form name="form1" method="post" action=""> <table border="1" cellspacing="0" cellpadding="0" bordercolor="#FFFFFF" bordercolordark="#CCCCCC" bordercolorlight="#FFFFFF"> <tr> <td height="30" colspan="2" bgcolor="antiquewhite">用户登录</td> </tr> <tr> <td width="59" height="30">用户名:</td> <td width="162"><input name="user" type="text" class="user"></td> </tr> <tr> <td height="30">密 码</td> <td><input name="pwd" type="text" class="pwd"></td> </tr> <tr> <td height="30" colspan="2" align="center"> <input name="button" type="button" class="btn_grey" value="登录" onclick="check()"> &nbsp; <input name="Submit2" type="reset" class="btn_grey" value="重置"> </td> </tr> </table> </form> </body> 练习:星期获取系统 <script type="text/javascript"> var now=new Date(); var day=now.getDay(); var week; switch(day){ case 1: week="星期一"; break; case 2: week="星期二"; break; case 3: week="星期三"; break; case 4: week="星期四"; break; case 5: week="星期五"; break; case 6: week="星期六"; break; case 7: week="星期七"; break; } document.write("今天是"+week); </script>

优秀的个人博客,低调大师

JavaScript学习(四)

一元运算符:只需要一个操作数。 + 正号:正号不会对我们的数值产生任何影响 - 负号:负号可以对数值进行负号取反 正负号都可以将数值类型转换成number,原理和number()函数一样。 自增和自减: 自增:可以使变量在自身的基础上+1 运算符:++ 自增分为2种,a++和++a 对于原变量来说是没有区别的,都会使原变量的值+1 不同的是a++和++a的值不同:a++的值等于自增前的值,++a的值等于自增后的值 自减:可以使变量在自身的基础上-1 运算符:-- 逻辑运算符: !非 :可以用来对一个值进行非运算----------为任意数值进行两次非运算,可以转化为布尔值 &&与 :可以对符号两边的值进行与运算并返回结果---两个值中只要有一个为false就返回false ||或 :可以对符号两边的值进行或运算并返回结果---两个值中只要有一个为true就返回true 赋值运算符: =等于:可以将右侧数值赋值给左侧的变量 +=:a=a+5可以转变为a += 5 -=:a=a-5等价于a -= 5 *=:a=a*5等价于a *= 5 /=:a=a/5等价于a /= 5 %=:a=a%5等价于a %= 5 关系运算符: 通过关系运算符可以比较两个值之间的关系。 如果关系成立将会返回true,如果关系不成立将会返回false。 >大于号 <小于号 >=大于等于 <=小于等于 非数值比较时会将其转化为数值再进行比较 任何值和NaN做任何比较都返回false。 如果符号两侧的值都是字符串,它不会将其转换成数字进行比较,会分别比较字符串中字符的Unicode编码大小。 比较字符编码时是一个一个进行比较的,如果两位一样则比较下一位。 Unicode编码: 输出编码:console.log(" \u四位编码 "); 在网页中输入Unicode编码:&#编码,这里的编码需要转化为10进制的 相等运算符: 运算符:== 用来比较两个值是否相等,如果相等返回true,不相等返回false 当使用==来比较时,如果值的类型不同,则会自动进行转化成相同类型,然后再比较。 undefined衍生自null,两者做==判断将会返回true。 条件运算符(三元运算符): 语法:条件表达式?语句1:语句2 执行流程:首先对条件表达式进行求值,如果返回true,则执行语句1;如果返回false,则执行语句2

优秀的个人博客,低调大师

JavaScript学习(三)

强制类型转换(将一个数据类型强制转换为另一个数据类型) 在JS中如果需要写16进制的数字,需要以0x开头。8进制数字,需要以0开头。2进制数字需要用0b开头 string类型强转 方式一:调用被转换类型的toString()方法。 ----被转换类型.toString() 该方法不会影响到原变量,它会将转换的结果返回。 但是null和undefined不能调用toString方法。 方式二:调用string()函数。 -----直接写string(); 将被转换数据作为参数传递给函数,可以转换null和undefined。 number类型强转 方式三:调用Number函数。 字符串转数值如果是纯数字将直接转换,如果非数字内容则转换为NaN,空字符串将转换为0。 布尔值转数值:false-->0 true-->1 空值转数值:null-->0 未定义转数值:NaN 方式四:调用parseInt() 把一个字符串转换成一个整数。 parseFloat()把字符串转换成一个浮点数。 parseInt()可以将字符串中有效的整数内容取出来。 如果对非string使用,会将其先转换为string。 Boolean类型强转 方式五:调用Boolean()函数。 数字转换为Boolean,除了0和NaN是false,其余都是true。 字符串转换为Boolean,除了空串,其余都是true。 null和undefined都会转换为false。 运算符(操作符) 通过操作符可以对一个值或者多个值进行运算。 算数运算符:+ - * / % 当对非number类型的值进行运算时,将会把值转换成number进行运算。 如果对两个字符串进行加法运算,会把两个字符串拼接成一个字符串并返回。 任何值和字符串进行加法操作,都会把值转换成字符串之后进行拼串操作。 任何值进行减法,乘法,除法操作,都可以转换成number。 %取模运算,除法取余运算。

优秀的个人博客,低调大师

JavaScript学习(二)

一、javascript基本代码 /**/ 多行注释 //单行注释 要养成一个良好的写注释习惯,也可以通过注释来对代码进行简单的测试。 1.JS中严格区分大小写 2.JS中每一条语句以分号结尾。 ---如果不写分号,浏览器会自动添加,但是会消耗一些系统资源。有些时候浏览器会加错分号。 3.JS中会自动忽略多个空格和换行,所以可以利用空格和换行对代码进行格式化 字面量:都是一些不可改变的值,可以直接使用,一般不会直接使用字面量。 比如:1、2、3、4、5 变量:变量可以用来保存字面量,而且变量的值可以任意改变。变量更方便我们使用,通过变量描述字面量,所以在开发中都是使用变量。 声明变量:在JS中,使用var关键字来声明变量。 /*声明变量:使用var关键字 */ var a=3; console.log(a); 标识符:在JS中所有可以由我们自主命名的都可以称为是标识符。例如:变量名、函数名、属性名 命名一个标识符规则:1.标识符中可以含有字母、数字、下划线、$,不能使用数字开头 2.标识符不能是ES中的关键字或保留字 比如:var var=3; 3.标识符一般使用驼峰命名法:首字母小写,每个单词开头大写,其余字母小写 helloWorld 数据类型:指的是字面量的类型,一共有6种数据类型。 1.String 字符串 2.number 数值 3.Boolean 布尔值 4.null 空值 5.undefined 未定义 6.object 对象 其中String、number、Boolean、null、undefined属于基本数据类型,object属于引用数据类型。 String字符串:在JS中字符串需要用引号引起来,单引号双引号效果一样,引号不能嵌套。 var str="ok"; 在字符串中可以使用 \ 来作为转义字符,当表示一些特殊符号时,可以使用 \ 进行转义。var str="你说:\" 今天天气不错 \"" \"可以表示一个" \'可以表示一个' \n换行 \t制表符 两个字符串相乘将会返回一个NaN:表示一个特殊的数值,not a number Number:在JS中所有数值都是number类型,包括整数和浮点数 var a=123 //number var b="123" //string JS中可以使用number.MAX_VALUE表示数值最大值。如果表示的数值超过最大值,则会返回一个infinity表示正无穷。 可以使用一个运算符来检查变量类型:typeof 变量 Boolean布尔值:布尔值只有两个true 和 false,进行逻辑判断 Null空值:null类型的值只有一个null,使用typeof来检查一个null值将会返回object。 undefined(未定义):undefined的值也只有自己,当声明一个变量但不给值赋值时。

优秀的个人博客,低调大师

JavaScript学习(一)

一、使用软件Hbuilder。 二、javascript(java编程语言,script脚本:java的脚本语言) 诞生于1995年,出现时主要用于处理网页中的前端验证。----所谓前端验证,就是指检查用户输入内容是否符合一定的规则。比如:用户名称的长度、密码的长度、邮箱的格式等。 javascript的标准是SCMAscript 一个完整的javascript由三个部分组成:ECMAscript(标准)、DOM(文档对象模型)、BOM(浏览器对象模型) 特点:1.解释型语言 ---不需要编译,可以直接运行 2.类似于C和java的语法结构 3.动态语言 4.基于原型的面向对象 <!--js代码需要编写到script的标签中--> <script type="text/javascript"> </script> 三、javascript语句警告框、页面body、控制台输出 /*控制浏览器弹出一个警告框*/ alert("这是第一行JavaScript代码") /*让计算机在页面中输出一个内容*/ document.write("的司法解释的凯撒缴纳罚款"); /*向控制台输出一个内容*/ console.log("在控制台位置"); 四、JS代码编写位置 <!--可以将JS代码编写到标签的onclick属性中 当我们点击按钮时,js代码才会执行 --> <button onclick="alert('为什么点击');">点击一下</button> <!--可以将JS代码写在超链接的href属性中,当点击超链接时也会执行JS代码--> <a href="javascript:alert('超链接点击')">555</a> 可以在JS文件夹中新建一个javascript。 <!--可以将javascript代码编写到外部JS文件夹中,通过script标签引入--> <!--script标签一旦引入外部代码,就不能再编写了--> <script type="text/javascript" src="js/script.js"> </script>

优秀的个人博客,低调大师

node知识学习

一、什么是node? node是js的运行环境,可以让js脱离前端单独运行 二、node的特点 1、单线程 无论是多少事情,都是一个线程去完成 单线程的优点:没有了多线程创建线程和销毁线程的开销,调度多线程也是需要消耗资源的。多线程,有多少事情就有多少线程去完成。 单线程的特点:无法利用多核cup,一旦陈谷被恶意的行为挂起,那么整个程序崩溃。 2、非堵塞I/O,在i/o进行的时候,线程不等待。阻塞I/O: 在i/o进行的时候,线程等待。 I:input O:output 读取文件、连接数据库读取数据库、操作光盘驱动器等等都叫做I/O。它们比较起内存和cpu的运行速度来说,是特别慢的。也就是说如果线程让硬盘读取一个比较大的文件。并且等待读取完毕并交给内存之后再去做别的事情。那么也就是说线程在等待读取(I/O)完成 3 事件驱动 事件驱动与非阻塞I/O是连着的一个事情。非阻塞I/O确实可以让线程在I/O进行的时候去做其它的事情,但是有个问题。线程去做了其它的事情,万一这个时候I/O完成了呢?怎么知道I/O什么时候完成?I/O完成的时候会触发一个事件,这个事件驱动着线程回来继续做下面的事情。 三、模块 3.1 内置核心模块 ——http http模块是用来搭建服务器的。 IncomingMessage : request OutgoingMessage : response METHODS : 这是一个数组里面装着所有的http请求方式 STATUS_CODES :是一个对象,对象的每个key都是一个状态码,对象的value是该状态码的含义 Server :是一个方法,用于将其它的服务转化成http服务 createServer : 是一个方法,用于创建服务 3.2 文件系统——file system Fs模块是用来操作文件的。所有的相关操作都是fs的方法。 创建文件并追加内容 3.3 url模块 Parse方法:将一个url路径,转成一个对象,对象有各种属性对应的就是不同的部分。 http://www.icketang.com/html/shouye/index.html?username=wanglaowu&password=123#123 上面的url字符串经过url模块的parse方法处理完会转变成以下对象 { Protocol:http, Host:www.icketang.com, Hostname:www.icketang.com, Port:null, Pathname:html/shouye/index.html, Search:?username=wanglaowu&password=123, Query: username=wanglaowu&password=123, Hash:#123, Href:http://www.icketang.com/html/shouye/index.html?username=wanglaowu&password=123#123 } parse方法还有第二个参数,是一个布尔值。默认为false。 如果为true,那么将会把返回的对象中的query选项转为一个对象。 url.format(urlObj) format这个方法是将传入的url对象编程一个url字符串并返回参数:urlObj指一个url对象 url解析get方法 Url模块是专门处理前端提交过来的请求地址的。 如何处理get请求: 1判断请求的方式 处理 如何处理post请求: 1判断请求的方式 if(req.method===”post”){ //code... } 2给req绑定data事件 if(req.method===”post”){ var str=“”; req.on(“data”,function(data_chunk){ //这个事件是post每发送一次数据,就会触发一次,回调函数中的参数是data_chunk表示的是这一次所 传递的数据。 str += data_chunk; }) req.on(“end”,function(){ //这个事件是post发送数据完毕之后才最终触发一次。所以说先触发1次或者多次data事件,再触发1次end事件。后续代码要写在end事件中 }) } 3.4 文件上传 formidable 3.5 express Express是第三方模块,用来快速开发一个服务器。 express中间件 Express内置的唯一中间件就是静态资源中间件。 req是前端传递过来的请求。 Req.query表示的是get请求携带的数据 包含在路由每个查询字符串参数的属性的对象。如果没有查询字符串,它是空的对象,{}。 Req.params表示的是从pathname上获得的数据 包含映射到指定的路线“参数”属性的对象。例如,如果你有路线/user/:name,那么“名”属性可作为req.params.name。这个对象默认{}。 Req.body 表示的是post请求携带的数据 (必须得先应用中间件:body-parser); 包含请求主体提交的键值对。默认情况下它是undefined。除非你使用了body-parser 例如:app.use(body_parser.urlencoded({extended:false})); Body-parser中间件: Ejs模板 Express允许我们像使用php那样(或者说是underscore的模板)使用ejs模板。 Ejs模板必须是一个文件,文件的拓展名是ejs => index.ejs 内部的内容还是大体上是html只不过有一部分是<%=variable%>组成的。当渲染的时候,会从字典中与variable进行匹配。并替换。 Ejs模板不需要引入app.js主程序文件。但是必须要在express中声明,而且还要放到node_modules中,这样express就能够找到ejs模块了: app.set(“view engine”,”ejs”); App.set表示要设置什么东西,第一个参数就是要设置的内容。第二个参数是对第一个参数更详细的说明. 声明完了之后,就可以在某个路由的响应中使用res.render()进行渲染ejs模板了。 条件:第一个参数是要渲染的模板文件。(该文件必须要存在与主程序同级目录下的views文件夹中) 第二个参数是渲染该模板文件的字典。 4.自定义模块 在NodeJs中,每一个js文件天生就是一个模块。 每个模块都能够向外暴露一些东西。 核心模块暴露的内容是十分重要的,比如:http模块负责搭建服务器。Fs模块负责操作文件等 自定义模块,随便定义。 模块化开发有什么好处呢? 每个模块只负责提供功能。不会将变量注册到全局作用域下。 我们自己定义了一个js文件。可以通过require函数将它引入到其它的js文件中。 方法是: var app = require(“./app.js”); 此时,必须在同级目录下有app.js这个文件 另一个方法是:将app.js放在同级目录下的node_modules文件夹中(或者上级、上上级、一直到根目录) 此时可以这么写了: var app = require(“app.js”); 此时的查找顺序是只会查找node_modules。 向外暴露有三种方式:

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册