自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 资源 (94)
  • 收藏
  • 关注

转载 YAML 语法

YAML 语法这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言).我们使用 YAML 是因为它像 XML 或 JSON 是一种利于人们读写的数据格式. 此外在大多数变成语言中有使用 YAML 的库.你可能希望读 Playbooks 实践中如何使用的.基本的 YAML对于 Ansible, 每一个 YAML 文件都是从一个列表开始. 列表中...

2018-02-23 09:30:04 245

转载 如何快速入门网络基础知识(TCP/IP 和 HTTP)

前言在写之前,先给这篇文章做一个明确定位,读完这篇文章后,希望你能够:对于计算机网络有初步的认识和了解,了解一些经典专业术语,如三次握手、四次挥手、DNS解析的含义。了解一些应用层协议,如传统的HTTP、HTTPS协议,以及业界近几年开始逐步普及的HTTP2、QUIC协议。通过实际生产环境下的例子,了解网络优化在项目中的实际意义以及带来的效果。课前准备为了能够更好地理解这篇文章的内容,建议阅读之前...

2018-02-22 16:40:49 10414

原创 OkHttp帮助类封装

package com.flong.utils;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.O...

2018-02-22 15:21:41 351

转载 Eclipse上GIT插件EGIT使用手册

一_安装EGIT插件 http://download.eclipse.org/egit/updates/或者使用Eclipse Marketplace,搜索EGit二_使用EGIT前的配置配置个人信息,最重要的是user.name和user.emaill  Prefe

2018-02-02 13:44:43 617

原创 最实际与高效生成数据库高级声明式SQL脚本神器研发

一、简介1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据库数据保持同步,故数据库SQL脚本非常作用。比如:数据库主脚本,副脚本,增量脚本。3、 什么是主脚本、副脚本、增量脚本呢?3.1、主脚本指数据库表或存储过程,视图脚本,序列等脚本。3.2、副脚本指必须执行主脚本之后才执行的脚本。换句话说在没执行主键脚本的情况下,副脚

2017-03-30 09:04:43 1039

原创 Window搭建Redis与简单的入门使用

2.1Redis准备工作 1)官方 http://redis.io2.2Redis下载 github下载  https://github.com/MSOpenTech/redis/releases   Downloads 6.4 MBRedis-x64-3.0.500.msi 5.58 MBRedis-x64-3.0.500.zip Source code (zip

2015-12-16 12:19:38 2112

原创 commons-codec-1.8.jar的加密

package com.test;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Hex;import org.apache.commons.codec.digest.DigestUtils;import org.apache

2014-04-29 15:39:36 2603

原创 JstlView

import java.io.File; import java.util.Locale; import org.springframework.web.servlet.view.JstlView; public class CustomJstlView extends JstlView { public boolean checkResource(Locale locale)

2014-04-29 15:26:32 882

原创 build.xml配置详解

要是报错请,右击build.xml==>>Run as =>>Ant build 找到Classpath==>>Add External JARs       添加报错所需要的jar即可...       例如:BUILD FAILED Class Not Found:(这句是在你没写检测才会输出.)            JDBC driver com.mysql.jdbc.Driv

2012-03-07 11:18:28 872

原创 MyEclipse+WebLogic+MySQL数据源的配置图解

参考博客写的.http://developer.51cto.com/art/200907/136113.htm代码差不多的..只是在他基础上进行分层修改。。。package com.pool.org.dao.impl;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;i...

2011-12-22 16:42:59 786

原创 logf4j与jdom连接数据库、jdbc的对比..

package com.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.sql.Connectio

2011-11-22 23:47:52 814

ffmpeg-4.3.1(linux-mac-window).7z

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Be【ffmpeg-4.3.1(linux-mac-window)】 1、ffmpeg-4.3.1-linux 2、ffmpeg-4.3.1-mac-static-64-bit 3、ffmpeg-4.3.1-window-static-32-bit 4、ffmpeg-4.3.1-window-static-64-bit

2020-08-23

springmvcmybatis

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd "> <!-- 自动扫描 --> <context:component-scan base-package="com.flong.*" /> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <!-- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> 初始化连接大小 <property name="initialSize" value="${jdbc.initialSize}"></property> 连接池最大数量 <property name="maxActive" value="${jdbc.maxActive}"></property> 连接池最大空闲 <property name="maxIdle" value="${jdbc.maxIdle}"></property> 连接池最小空闲 <property name="minIdle" value="${jdbc.minIdle}"></property> 获取连接最大等待时间 <property name="maxWait" value="${jdbc.maxWait}"></property> </bean> --> <bean id="dbPasswordCallback" class="com.flong.utils.DBPasswordCallback"> <description>数据库连接回调密码解密</description> </bean> <bean id="statFilter" class="com.alibaba.druid.filter.stat.StatFilter" lazy-init="true"> <description>状态过滤器</description> <property name="logSlowSql" value="true" /> <property name="mergeSql" value="true" /> </bean> <!-- 操作数据库删除,修改,添加的数据源 --> <bean id="writeDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init" lazy-init="true"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}" /> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}" /> <!-- --> <property name="defaultReadOnly" value="true" /> <property name="proxyFilters"> <list> <ref bean="statFilter" /> </list> </property> <property name="filters" value="${druid.filters}" /> <property name="connectionProperties" value="password=${password}" /> <property name="passwordCallback" ref="dbPasswordCallback" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="validationQuery" value="SELECT 'x'" /> <property name="timeBetweenLogStatsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> </bean> <!-- 操作数据库读的数据源 --> <bean id="readDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" init-method="init" lazy-init="true"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}" /> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}" /> <!-- --> <property name="defaultReadOnly" value="true" /> <property name="proxyFilters"> <list> <ref bean="statFilter" /> </list> </property> <property name="filters" value="${druid.filters}" /> <property name="connectionProperties" value="password=${password}" /> <property name="passwordCallback" ref="dbPasswordCallback" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="validationQuery" value="SELECT 'x'" /> <property name="timeBetweenLogStatsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" /> </bean> <!--利用AbstractRoutingDataSource实现动态数据源切换 --> <bean id="dataSource" class="com.flong.utils.persistence.DynamicChooseDataSource" lazy-init="true"> <description>数据源</description> <property name="targetDataSources"> <map key-type="java.lang.String" value-type="javax.sql.DataSource"> <!-- write --> <entry key="write" value-ref="writeDataSource" /> <!-- read --> <entry key="read" value-ref="readDataSource" /> </map> </property> <!-- 从org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource这个类里面可以看到 defaultTargetDataSource这个对象,根据自己需求的情况默认的情况给一个默认的数据源. --> <property name="defaultTargetDataSource" ref="writeDataSource" /> <property name="methodType"> <map key-type="java.lang.String"> <!-- read --> <entry key="read" value=",get,select,count,list,query" /> <!-- write --> <entry key="write" value=",add,insert,create,update,delete,remove," /> </map> </property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 添加 mybatis-config配置上去。--> <property name="configLocation" value="classpath:mybatis-config.xml" /> <!-- 扫描com.flong.pojo下面的所有类,减少mybatis的mapping所有实体类的路径(parameterType),直接写一个JavaBean即可 --> <property name="typeAliasesPackage" value="com.flong.pojo"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mapping/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.flong.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置事务通知属性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 定义事务传播属性 --> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="new*" propagation="REQUIRED" /> <tx:method name="set*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="change*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="find*" propagation="REQUIRED" read-only="true" /> <tx:method name="load*" propagation="REQUIRED" read-only="true" /> <tx:method name="*" propagation="REQUIRED" read-only="true" /> </tx:attributes> </tx:advice> <!-- 配置事务切面 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.flong.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" /> </aop:config> </beans>

2016-07-07

Redis与简单的入门

2.1Redis准备工作 1)官方 http://redis.io 2.2Redis下载 github下载 https://github.com/MSOpenTech/redis/releases Downloads 6.4 MBRedis-x64-3.0.500.msi 5.58 MBRedis-x64-3.0.500.zip Source code (zip) Source code (tar.gz) 百度网盘:http://pan.baidu.com/s/1HunuQ 2.3Redis安装与注意事项 1)我下载的到本地的文件是redis-windows-master 打开这个文件D:\Server\redis\redis-windows-master\downloads\redis64-2.6.12.1.zip这个目录下面有 redis.conf配置是window下使用启动redis所需要的文件,因为我本机是32bit的.我在官方也没找到然后redis64 把下面的文件拷贝过来,虽然上面是写着64.拷贝过来也可以启动。当然了,你不能直接用redis-windows-master 下面的所有 2)解压的redis包含的文件 redis-benchmark.exe redis-check-aof.exe redis-check-dump.exe redis-cli.exe redis-server.exe 解压直接双击 redis-server.exe文件启动redis系统会报一个错误,无法识别是32bit还是64bit的系统,从此验证 这个五个文件不能在32bit系统启动,当然这个不用担心,我已经下载好有32bit的redis的文件.redisbin_x32 3)自己创建bat后缀格式的批处理文件作为快捷键启动window服务,redis.conf这个文件可以自己随便定,有意义即可 并且必须要这个批处理能读取这个配置 A)start-redis.bat redis-server redis.conf B)service-install.bat redis-server.exe --service-install redis.conf --loglevel verbose C)uninstall-service.bat redis-server --service-uninstall 4)使用redis命令启动。 A)首先进到redis的根目录下,加上我的文件目录放在,打开cmd命令窗体 D:\Server\redis>cd redisbin_x32出现如下截图表示成功:

2015-12-16

Window搭建Redis

2.1Redis准备工作 1)官方 http://redis.io 2.2Redis下载 github下载 https://github.com/MSOpenTech/redis/releases Downloads 6.4 MBRedis-x64-3.0.500.msi 5.58 MBRedis-x64-3.0.500.zip Source code (zip) Source code (tar.gz) 百度网盘:http://pan.baidu.com/s/1HunuQ 2.3Redis安装与注意事项 1)我下载的到本地的文件是redis-windows-master 打开这个文件D:\Server\redis\redis-windows-master\downloads\redis64-2.6.12.1.zip这个目录下面有 redis.conf配置是window下使用启动redis所需要的文件,因为我本机是32bit的.我在官方也没找到然后redis64 把下面的文件拷贝过来,虽然上面是写着64.拷贝过来也可以启动。当然了,你不能直接用redis-windows-master 下面的所有 2)解压的redis包含的文件 redis-benchmark.exe redis-check-aof.exe redis-check-dump.exe redis-cli.exe redis-server.exe 解压直接双击 redis-server.exe文件启动redis系统会报一个错误,无法识别是32bit还是64bit的系统,从此验证 这个五个文件不能在32bit系统启动,当然这个不用担心,我已经下载好有32bit的redis的文件.redisbin_x32 3)自己创建bat后缀格式的批处理文件作为快捷键启动window服务,redis.conf这个文件可以自己随便定,有意义即可 并且必须要这个批处理能读取这个配置 A)start-redis.bat redis-server redis.conf B)service-install.bat redis-server.exe --service-install redis.conf --loglevel verbose C)uninstall-service.bat redis-server --service-uninstall 4)使用redis命令启动。 A)首先进到redis的根目录下,加上我的文件目录放在,打开cmd命令窗体 D:\Server\redis>cd redisbin_x32出现如下截图表示成功: 2.4启动redis-cli.exe 此时出现上面那个界面就可以双击redis-cli.exe文件 1)set tiemao命令的使用,使用此命令必须保证服务是启动的 一回车之后此时,可以看到这个服务这个窗体相应 2)设置了这个命令就可以用get tiemao 2.5redis命令

2015-12-16

精髓Oralcle讲课笔记

-- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、select ename, sal * 12 from emp; --计算年薪 2、select 2*3 from dual; --计算一个比较纯的数据用dual表 3、select sysdate from dual; --查看当前的系统时间 4、select ename, sal*12 anuual_sal from emp; --给搜索字段更改名称(双引号 keepFormat 别名有特殊字符,要加双引号)。 5、--任何含有空值的数学表达式,最后的计算结果都是空值。 6、select ename||sal from emp; --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from emp; --字符串的连接 8、select distinct deptno from emp; --消除deptno字段重复的值 9、select distinct deptno , job from emp; --将与这两个字段都重复的值去掉 10、select * from emp where deptno=10; --(条件过滤查询) 11、select * from emp where empno > 10; --大于 过滤判断 12、select * from emp where empno 10 --不等于 过滤判断 13、select * from emp where ename > 'cba'; --字符串比较,实际上比较的是每个字符的AscII值,与在Java中字符串的比较是一样的 14、select ename, sal from emp where sal between 800 and 1500; --(between and过滤,包含800 1500) 15、select ename, sal, comm from emp where comm is null; --(选择comm字段为null的数据) 16、select ename, sal, comm from emp where comm is not null; --(选择comm字段不为null的数据) 17、select ename, sal, comm from emp where sal in (800, 1500,2000); --(in 表范围) 18、select ename, sal, hiredate from emp where hiredate > '02-2月-1981'; --(只能按照规定的格式写) 19、select ename, sal from emp where deptno =10 or sal >1000; 20、select ename, sal from emp where deptno =10 and sal >1000; 21、select ename, sal, comm from emp where sal not in (800, 1500,2000); --(可以对in指定的条件进行取反) 22、select ename from emp where ename like '%ALL%'; --(模糊查询) 23、select ename from emp where ename like '_A%'; --(取第二个字母是A的所有字段) 24、select ename from emp where ename like '%/%%'; --(用转义字符/查询字段中本身就带%字段的) 25、select ename from emp where ename like '%$%%' escape '$'; --(用转义字符/查询字段中本身就带%字段的) 26、select * from dept order by deptno desc; (使用order by desc字段 对数据进行降序排列 默认为升序asc); 27、sel

2013-05-23

Installanywhere

Installanywhere 是一款把软件程序打包成支持多平台安装软件的工具。installAnywhere针对两种用户设计了不同的开发环境:一种是common designer,另一种是Advanced Designer。当你第一次打开IA的时候,缺省的是common designer,你只需要做一些简单的配置,比如产品的名称,需要安装的文件,要不要绑定虚拟机等等,然后就可以build出一个安装程序了。Advanced Designer是为高级用户设置的,提供了更多,更丰富的功能,你可以用它来打造你所需要的安装程序。

2013-03-19

第三第四季Android源代码和PPT

mars第三第四季Android源代码和PPT

2013-03-19

HTML5&CSS;权威代码

《HTML5与CSS3权威指南》范例及代码

2012-12-04

ExtJs精通入门电子书

精通JS脚本之ExtJS框架(附光盘1张) 《精通JS脚本之ExtJS框架》由浅入深地讲解了ExtJS在Web开发中的相关技术。本书共分17章,分别介绍了JavaScript的对象编程、JavaScript浏览器对象模型和事件机制、ExtJS的核心类库和组件、ExtJS的事件处理方式、设计进度条、设计工具栏和菜单栏、设计面板、设计表格、设计表单、设计数据表、对Ajax的支持以及如何调试等。最后利用一个商品信息管理系统和一个企业任务管理系统,向读者演示了ExtJS在实际项目中的应用以及实现流程。   《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。   《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为RIA Web程序开发的培训教材。 第1章 JavaScript入门必备 1.1 JavaScript语言概述 1.1.1 JavaScript简介 1.1.2 JavaScript特点 1.1.3 JavaScript与Java 1.2 第一个JavaScript程序 1.2.1 嵌入JavaScript 1.2.2 链接外部JavaScript文件 1.2.3 注意事项 1.3 基础语法 1.3.1 数据类型 1.3.2 变量与常量 1.3.3 运算符 1.4 流程控制语句 1.4.1 if条件语句 1.4.2 switch条件语句 1.4.3 while循环语句 1.4.4 do while循环语句 1.4.5 for循环语句 1.4.6 for in循环语句 1.4.7 try catch finally语句 1.4.8 其他语句 第2章 JavaScript浏览器对象模型与事件处理 2.1 浏览器对象模型 2.1.1 文档对象 2.1.2 表单及其元素对象 2.1.3 浏览器信息对象 2.1.4 窗口对象 2.1.5 网址对象 2.1.6 历史记录对象 2.2 基本事件处理 2.3 2级DOM事件模型 2.3.1 事件传播 2.3.2 注册事件处理程序 2.3.3 event对象 2.4 常用事件 2.4.1 键盘事件 2.4.2 鼠标事件 2.4.3 页面事件 第3章 开始使用ExtJS 3.1 ExtJS概述 3.1.1 ExtJS简介 3.1.2 ExtJS中的基本概念 3.1.3 ExtJS与常见JavaScript库的介绍与对比 3.2 创建第一个程序 3.2.1 下载ExtJS 3.2.2 部署到开发工具中 3.2.3 编写HelloWorld.html 3.2.4 运行调试ExtJS 3.3 辅助开发 3.3.1 调试工具Firebug 3.3.2 开发利器Spket 第4章 ExtJS事件机制 4.1 设计模式——观察者模式 4.2 自定义事件 4.3 浏览器事件 4.4 ExtJS中的事件 4.4.1 Function.call()/apply()方法 4.4.2 函数的作用域 4.4.3 Ext.lib.Event事件 4.4.4 Ext.util.Observable事件 4.4.5 Ext.EventManager事件 4.4.6 Ext.EventObject事件 4.5 各种事件登记方式 4.5.1 传统式登记 4.5.2 内联式登记 4.5.3 Dom Level2登记 4.6 高级组件事件 4.7 ExtJS键盘事件 第5章 ExtJS组件 5.1 核心组件 5.1.1 ExtJS组件结构 5.1.2 Ext.Component 5.1.3 Ext.BoxComponent 5.1.4 Ext.Container 5.1.5 Ext.Panel 5.1.6 Ext.TabPanel 5.2 信息提示框组件 5.2.1 Ext.MessageBox简介 5.2.2 Ext.MessageBox.alert&#40;&#41; 5.2.3 Ext.MessageBox.confirm() 5.2.4 Ext.MessageBox.prompt() 5.2.5 Ext.MessageBox.wait() 5.2.6 Ext.MessageBox.show() 5.2.7 Ext.MessageBox的其他功能 5.3 进度条组件 5.3.1 Ext.ProgressBar简介 5.3.2 手工模式的进度条 5.3.3 自动模式的进度条 5.3.4 自定义样式的进度条 5.4 工具栏和菜单栏 5.4.1 Ext.Toolbar简介 5.4.2 只包含按钮的简单工具栏 5.4.3 包含多种元素的复杂工具栏 5.4.4 Ext.menu.Menu简介 5.4.5 最简单的菜单栏 5.4.6 创建三级或多级菜单 5.4.7 具有选择框的菜单 第6章 页面元素与模板 6.1 构成用户界面的元素 6.2 获取页面元素 6.3 元素常见的使用方法 6.3.1 常见的“显示/隐藏”方法 6.3.2 常见的“内容控制”方法 6.3.3 常见的“操控DOM”方法 6.3.4 常见的“尺寸大小/定位”方法 6.3.5 常见的“特效动画”方法 6.3.6 DomHelper简介 6.4 DomQuery入门 6.4.1 元素选择符Selector 6.4.2 属性选择符Attributes Selectors 6.4.3 CSS值元素选择符 6.4.4 Ext.query与Ext.select 6.5 应用模板 6.5.1 Ext.Template 6.5.2 Ext.XTemplate 第7章 设计表单类布局 7.1 Form表单简介 7.1.1 Form表单的基本配置 7.1.2 ExtJS对Form表单的封装 7.2 ExtJS的表单组件 7.2.1 文本输入控件Ext.form.TextField 7.2.2 多行文本输入控件Ext.form.TextArea 7.2.3 单选框 7.2.4 复选框 7.2.5 下拉列表框 7.2.6 日期输入控件Ext.form.DateField 7.2.7 在线编辑器Ext.form.HtmlEditor 7.3 ExtJS表单组件的综合应用 第8章 设计表格类布局 8.1 表格简介 8.1.1 表格的基本属性 8.1.2 制作第一个表格 8.2 表格常用功能详解 8.2.1 主要属性功能 8.2.2 自定义列宽度 8.2.3 执行按列排序 8.2.4 解决中文排序 8.2.5 格式化显示日期类型数据 8.3 美化表格 8.4 设置表格背景颜色 8.5 显示行号和复选框 8.5.1 显示行号 8.5.2 引用复选框 第9章 表格的高级功能 9.1 表格视图——Ext.grid.GridView 9.2 表格分页 9.2.1 添加表格分页显示工具条 9.2.2 从后台脚本获得分页数据 9.2.3 在表格顶部显示分页工具条 9.2.4 实现前台分页效果 9.3 可编辑表格控件——EditorGrid 9.3.1 制作第一个EditorGrid 9.3.2 添加一行数据 9.3.3 保存修改结果 9.3.4 验证EditGrid中的数据 9.3.5 限制输入数据的类型 9.4 PropertyGrid属性表格控件 9.4.1 PropertyGrid简介 9.4.2 只读的PropertyGrid 9.4.3 对name列强制排序并获得value 9.4.4 自定义编辑器 9.5 分组表格控件——Group 9.5.1 分组表格简介 9.5.2 Ext.grid.GroupingView的配置操作 9.6 可拖放的表格 9.6.1 拖放改变表格的大小 9.6.2 在同一个表格里拖放 9.6.3 表格之间的拖放 9.6.4 表格与树之间的拖放 第10章 设计树状结构布局 10.1 TreePanel的基本使用 10.1.1 创建一棵树 10.1.2 为树生枝展叶 10.1.3 树形的配置 10.1.4 使用TreeLoader获得数据 10.1.5 读取本地JSON数据 10.2 树的事件 10.3 右键菜单 10.4 修改节点的默认图标 10.5 从节点弹出对话框 10.6 节点提示信息 10.7 为节点设置超链接 10.8 树形的拖放 10.8.1 节点拖放的3种形式 10.8.2 叶子不能append 10.8.3 判断拖放的目标 10.8.4 树之间的拖放 10.9 树形过滤器TreeFilter 10.10 利用TreeSorter对树进行排序 10.11 树形节点视图——Ext.tree.TreeNodeUI 10.12 表格与树形的结合——Ext.ux.tree.ColumnTree 第11章 其他布局类简介 11.1 标准布局类 11.1.1 折叠布局——AccordionLayout 11.1.2 边框布局——BorderLayout 11.1.3 卡片式布局——CardLayout 11.1.4 列布局——ColoumnLayout 11.1.5 锚点布局——AnchorLayout 11.1.6 自适应布局——FitLayout 11.1.7 ContainerLayout 11.2 与布局有关的其他知识 11.2.1 父类Ext.Container公共配置与xtype的概念 11.2.2 使用Viewport 11.2.3 实现表单元素横排 第12章 ExtJS对Ajax的支持 12.1 Ext.Ajax介绍 12.1.1 Ext.Ajax.request方法详解 12.1.2 Ext.Ajax.request操作示例 12.1.3 Ext.Ajax.request提交XML数据 12.2 Ext.Updater基础 12.2.1 Ext.Updater.update方法 12.2.2 Ext.Updater.update操作示例 12.3 利用Ajax优化Web应用框架 12.3.1 多级联动菜单 12.3.2 Ajax修改用户密码 12.3.3 自动保存的网络记事本 12.3.4 网页计算器 第13章 设计数据驱动模式 13.1 XML/JSON数据格式比较 13.2 容器类MixedCollection 13.3 数据存储基本单元Record与dataField 13.3.1 dataField 13.3.2 Record 13.4 数据存储store 13.4.1 数据载入 13.4.2 对数据进行排序 13.4.3 从store 中获取数据 13.4.4 更新store 中的数据 13.4.5 加载及显示数据 13.5 数据代理 13.5.1 Ext.data.DataProxy 13.5.2 Ext.data.MemoryProxy 13.5.3 Ext.data.HttpProxy 13.5.4 Ext.data.ScriptTagProxy 13.6 数据读取器 13.6.1 Ext.data.DataReader 13.6.2 Ext.data.ArrayReader 13.6.3 Ext.data.JsonReader 13.6.4 Ext.data.XmlReader 13.7 Ext.ux.DWR 13.7.1 Ext.data.DwrProxy 13.7.2 Ext.data.DWRTreeLoader 13.7.4 Web服务端配置 13.7.5 服务层接口 第14章 ExtJS扩展 14.1 利用Ext.extend实现继承 14.2 与ExtJS扩展相关的预备知识 14.2.1 定义命名空间 14.2.2 使用xtype 14.3 用户扩展和插件 14.3.1 编写自定义用户扩展 14.3.2 常用插件UploadDialog 14.3.3 常用插件ManagedIFrame 14.4 使用ExtJS制作Flash统计报表 14.4.1 柱状图 14.4.2 折线图 14.4.3 饼状图 14.4.4 柱状栈图 第15章 调试JavaScript与HTML 15.1 Firebug的基本使用 15.1.1 开启或关闭Firebug 15.1.2 控制台 15.2 Firebug的应用 15.2.1 源代码调试 15.2.2 CSS调试 15.2.3 脚本调试 15.3 跟踪网络传输状态 15.4 在脚本文件中加入调试命令 15.5 在IE中使用Firebug 15.5.1 前端调试利器DebugBar 15.5.2 IE下的优秀JavaScript调试工具Companion.JS 15.5.3 DebugBar和Companion.JS的基本操作 15.6 调试技巧 15.6.1 在Firebug中直接调试脚本 15.6.2 调试代码运行速度 15.6.3 查看对象属性 第16章 ExtJS案例:商品信息管理系统 16.1 商品信息管理系统功能介绍 16.2 数据库设计和实现 16.2.1 数据库概念结构设计 16.2.2 数据库表设计 16.3 为项目做好准备 16.4 登录界面 16.5 栏目加载 16.6 为项目换肤 16.7 商品信息管理 16.7.1 商品信息的查询 16.7.2 商品信息的添加 16.7.3 商品信息的删除 16.7.4 商品信息的更新 第17章 ExtJS案例:企业任务管理系统 17.1 系统概述 17.2 需求分析 17.3 数据库设计 17.4 员工任务管理 17.4.1 个人任务处理 17.4.2 个人资料编辑 17.5 主管任务管理 17.5.1 部门计划处理 17.5.2 部门人员管理 17.6 系统管理员权限分配

2012-10-24

Android华为C8812刷机教程

一、先刷Recovery (如果前面已经刷过recovery,就不需要再刷了) 1、在手机上开启USB调试,并安装驱动 (右键点 我的电脑-属性-设备管理器,查看有没有 android adb 驱动,一般连接过豌豆荚都有驱动了,没有的话可以自行安装,或者连接一次豌豆荚自动下载。) (1) 在手机上选择“设置”,然后进入“开发人员选项”,勾选 “USB调试” (2) 连接USB数据线 (3) 安装驱动,并检查驱动是否安装 2、手机进入 bootloader 状态 (也就是常说的 第一屏 状态) (1) 在手机上选择“设置”,往下拖,找到“快速启动”,关闭 (2) 关机,并且拔掉数据线。并且关闭电脑上开启的豌豆荚、手机助手之类的工具 (3) 然后按 音量下 + 开机键,保持10秒左右,停留在第一屏,只显示华为菊花的状态,就是进入了 bootloader 3、把手机连接到电脑,运行recovery.exe,按提示进行

2012-10-24

JSON入门例子

var obj,sid;//全局变量 $(document).ready(function() { //看着DIV的样式(位置 ,高度,) var stock=$("#stock").css("border","1px solid black") .width("150px").css("position","absolute") .css("z-index","99").css("background-color","blue") .css("color","yellow");//隐藏 stock.hide(); var var_a=$("a"); //鼠标移上事件 var_a.mouseover(function(event){ var aNode=$(this); var divNode=aNode.parent(); sid=divNode.attr("id"); update() //找当前的位置 // var offset=aNode.offset(); // stock.css("left",offset.left+"px").css("top",offset.top+aNode.height()+"px"); /** * 期望鼠标在右下方 */ var $event=event||window.event; stock.css("left",$event.clientX+5+"px").css("top",$event.clientY+5+"px"); stock.show();//显示DIV }); //鼠标移开事件 var_a.mouseout(function(){ stock.hide(); }); getStockInfo(); //setInterval(getStockInfo, 1000);//设置每一秒钟变动股票 }) /** * 获取信息 * @return */ function getStockInfo() { $.post("JsonAction",null,function(data){ obj=eval&#40;data&#41;;// var S1=obj["112"]; var S2=obj["113"]; var sp1=$("#112").children("span"); sp1.html(S1.now); if(S1.now>S1.yesterday){ sp1.css("color","red");//设置为红色 }else{ sp1.css("color","green");//绿色 } var sp2=$("#113").children("span"); sp2.html(S2.now); if(S2.now>S2.yesterday){ sp2.css("color","red"); }else{ sp2.css("color","green"); } update() }); } /** * 更新 * @return */ function update() { var obje=obj[sid]; for (var pr in obje) { if(pr!="name"){ $("#"+pr).children("span").html(obje[pr]); } } }

2012-10-15

spring源代码

package cn.javass.spring.chapter4; import java.io.File; import java.io.IOException; import junit.framework.Assert; import org.jboss.vfs.VFS; import org.jboss.vfs.VirtualFile; import org.jboss.vfs.spi.RealFileSystem; import org.junit.Test; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; @SuppressWarnings("all") public class ResourcePatternTest { @Test public void testClasspathPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //只加载一个绝对匹配Resource,且通过ResourceLoader.getResource进行加载 Resource[] resources = resolver.getResources("classpath:META-INF/INDEX.LIST"); Assert.assertEquals(1, resources.length); //只加载一个匹配的Resource,且通过ResourceLoader.getResource进行加载 resources = resolver.getResources("classpath:META-INF/*.LIST"); Assert.assertTrue(resources.length == 1); //只加载一个绝对匹配Resource,且通过ResourceLoader.getResource进行加载 resources = resolver.getResources("classpath:META-INF/MANIFEST.MF"); Assert.assertEquals(1, resources.length); } @Test public void testClasspathAsteriskPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //将加载多个绝对匹配的所有Resource //将首先通过ClassLoader.getResources("META-INF")加载非模式路径部分 //然后进行遍历模式匹配 Resource[] resources = resolver.getResources("classpath*:META-INF/INDEX.LIST"); Assert.assertTrue(resources.length > 1); //将加载多个模式匹配的Resource resources = resolver.getResources("classpath*:META-INF/*.LIST"); Assert.assertTrue(resources.length > 1); } @Test public void testClasspathAsteriskPrefixLimit() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //将首先通过ClassLoader.getResources("")加载目录, //将只返回文件系统的类路径不返回jar的跟路径 //然后进行遍历模式匹配 Resource[] resources = resolver.getResources("classpath*:asm-*.txt"); Assert.assertTrue(resources.length == 0); //将通过ClassLoader.getResources("asm-license.txt")加载 //asm-license.txt存在于com.springsource.net.sf.cglib-2.2.0.jar resources = resolver.getResources("classpath*:asm-license.txt"); Assert.assertTrue(resources.length > 0); //将只加载文件系统类路径匹配的Resource resources = resolver.getResources("classpath*:LICENS*"); Assert.assertTrue(resources.length == 1); } @Test public void testFilekPrefix() throws IOException { ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("file:D:/*.txt"); Assert.assertTrue(resources.length > 0); } @Test public void testVfsPrefix() throws IOException { //1.创建一个虚拟的文件目录 VirtualFile home = VFS.getChild("/home"); //2.将虚拟目录映射到物理的目录 VFS.mount(home, new RealFileSystem&#40;new File("d:"&#41;)); //3.通过虚拟目录获取文件资源 VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver.getResources("/home/test.txt"); Assert.assertTrue(resources.length > 0); System.out.println(resources[0].getClass()); } }

2012-10-07

MYSSQL_MSS_ORACLE经典SQL.pdf

--Student(S#,Sname,Sage,Ssex) 学生表 --SC(S#,C#,score) 成绩表 --Course(C#,Cname,T#) 课程表 --Teacher(T#,Tname) 教师表 --问题: 1、--查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、--查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、--查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、--查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、--查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平'); 6、--查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001' and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 7、--查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平')); 8、--查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名; Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2 from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score; 9、--查询所有课程成绩小于60分的同学的学号、姓名; select S#,Sname from Student where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60); 10、--查询没有学全所有课的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course); 11、--查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名; select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001'; 12、--查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名; select distinct SC.S#,Sname from Student,SC where Student.S#=SC.S# and C# in (select C# from SC where S#='001'); 13、--把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩; update SC set score=(select avg(SC_2.score) from SC SC_2 where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平'); 14、--查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名; select S# from SC where C# in (select C# from SC where S#='1002') group by S# having count(*)=(select count(*) from SC where S#='1002'); 15、--删除学习“叶平”老师课的SC表记录; Delect SC from course ,Teacher where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平'; 16、--向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号,号课的平均成绩; Insert SC select S#,'002',(Select avg(score) from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002'); 17、--按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分 SELECT S# as 学生ID ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理 ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语 ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩 FROM SC AS t GROUP BY S# ORDER BY avg(t.score) 18、--查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分 SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分 FROM SC L ,SC AS R WHERE L.C# = R.C# and L.score = (SELECT MAX(IL.score) FROM SC AS IL,Student AS IM WHERE L.C# = IL.C# and IM.S#=IL.S# GROUP BY IL.C#) AND R.Score = (SELECT MIN(IR.score) FROM SC AS IR WHERE R.C# = IR.C# GROUP BY IR.C# ); 19、--按各科平均成绩从低到高和及格率的百分数从高到低顺序 SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩 ,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数 FROM SC T,Course where t.C#=course.C# GROUP BY t.C# ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC 20、--查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML; (003),数据库(004) SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分 ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数 ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分 ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数 ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分 ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数 ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分 ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数 FROM SC 21、--查询不同老师所教不同课程平均分从高到低显示 SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩 FROM SC AS T,Course AS C ,Teacher AS Z where T.C#=C.C# and C.T#=Z.T# GROUP BY C.C# ORDER BY AVG(Score) DESC 22、--查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004) --[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩 SELECT DISTINCT top 3 SC.S# As 学生学号, Student.Sname AS 学生姓名 , T1.score AS 企业管理, T2.score AS 马克思, T3.score AS UML, T4.score AS 数据库, ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分 FROM Student,SC LEFT JOIN SC AS T1 ON SC.S# = T1.S# AND T1.C# = '001' LEFT JOIN SC AS T2 ON SC.S# = T2.S# AND T2.C# = '002' LEFT JOIN SC AS T3 ON SC.S# = T3.S# AND T3.C# = '003' LEFT JOIN SC AS T4 ON SC.S# = T4.S# AND T4.C# = '004' WHERE student.S#=SC.S# and ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) NOT IN (SELECT DISTINCT TOP 15 WITH TIES ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) FROM sc LEFT JOIN sc AS T1 ON sc.S# = T1.S# AND T1.C# = 'k1' LEFT JOIN sc AS T2 ON sc.S# = T2.S# AND T2.C# = 'k2' LEFT JOIN sc AS T3 ON sc.S# = T3.S# AND T3.C# = 'k3' LEFT JOIN sc AS T4 ON sc.S# = T4.S# AND T4.C# = 'k4' ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC); 23、--统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60] SELECT SC.C# as 课程ID, Cname as 课程名称 ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85] ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70] ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60] ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] FROM SC,Course where SC.C#=Course.C# GROUP BY SC.C#,Cname; 24、--查询学生平均成绩及其名次 SELECT 1+(SELECT COUNT( distinct 平均成绩) FROM (SELECT S#,AVG(score) AS 平均成绩 FROM SC GROUP BY S# ) AS T1 WHERE 平均成绩 > T2.平均成绩) as 名次, S# as 学生学号,平均成绩 FROM (SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) AS T2 ORDER BY 平均成绩 desc; 25、--查询各科成绩前三名的记录:(不考虑成绩并列情况) SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 FROM SC t1 WHERE score IN (SELECT TOP 3 score FROM SC WHERE t1.C#= C# ORDER BY score DESC ) ORDER BY t1.C#; 26、--查询每门课程被选修的学生数 select c#,count(S#) from sc group by C#; 27、--查询出只选修了一门课程的全部学生的学号和姓名 select SC.S#,Student.Sname,count(C#) AS 选课数 from SC ,Student where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 28、--查询男生、女生人数 Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男'; Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女'; 29、--查询姓“张”的学生名单 SELECT Sname FROM Student WHERE Sname like '张%'; 30、--查询同名同性学生名单,并统计同名人数 select Sname,count(*) from Student group by Sname having count(*)>1;; 31、--1981年出生的学生名单(注:Student表中Sage列的类型是datetime) select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age from student where CONVERT(char(11),DATEPART(year,Sage))='1981'; 32、--查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列 Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ; 33、--查询平均成绩大于85的所有学生的学号、姓名和平均成绩 select Sname,SC.S# ,avg(score) from Student,SC where Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85; 34、--查询课程名称为“数据库”,且分数低于60的学生姓名和分数 Select Sname,isnull(score,0) from Student,SC,Course where SC.S#=Student.S# and SC.C#=Course.C# and Course.Cname='数据库'and score <60; 35、--查询所有学生的选课情况; SELECT SC.S#,SC.C#,Sname,Cname FROM SC,Student,Course where SC.S#=Student.S# and SC.C#=Course.C# ; 36、--查询任何一门课程成绩在70分以上的姓名、课程名称和分数; SELECT distinct student.S#,student.Sname,SC.C#,SC.score FROM student,Sc WHERE SC.score>=70 AND SC.S#=student.S#; 37、--查询不及格的课程,并按课程号从大到小排列 select c# from sc where scor e <60 order by C# ; 38、--查询课程编号为003且课程成绩在80分以上的学生的学号和姓名; select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003'; 39、--求选了课程的学生人数 select count(*) from sc; 40、--查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩 select Student.Sname,score from Student,SC,Course C,Teacher where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# ); 41、--查询各个课程及相应的选修人数 select count(*) from sc group by C#; 42、--查询不同课程成绩相同的学生的学号、课程号、学生成绩 select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ; 43、--查询每门功成绩最好的前两名 SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 FROM SC t1 WHERE score IN (SELECT TOP 2 score FROM SC WHERE t1.C#= C# ORDER BY score DESC ) ORDER BY t1.C#; 44、--统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列 select C# as 课程号,count(*) as 人数 from sc group by C# order by count(*) desc,c# 45、--检索至少选修两门课程的学生学号 select S# from sc group by s# having count(*) > = 2 46、--查询全部学生都选修的课程的课程号和课程名 select C#,Cname from Course where C# in (select c# from sc group by c#) 47、--查询没学过“叶平”老师讲授的任一门课程的学生姓名 select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平'); 48、--查询两门以上不及格课程的同学的学号及其平均成绩 select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#; 49、--检索“004”课程分数小于60,按分数降序排列的同学学号 select S# from SC where C#='004'and score <60 order by score desc; 50、--删除“002”同学的“001”课程的成绩 delete from Sc where S#='001'and C#='001';

2012-09-09

MYSQL_MSS_ORACLE函数使用

MYSQL_MSS_ORACLE函数使如果结果的长度大于服务器参数max_allowed_packet,字符串值函数返回NULL. 对于针对字符串位置的操作,第一个位置被标记为1. 1、ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回NULL. mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dx'); -> 100也可参见ORD()函数. 2、ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code)) [*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码.如果最左面的字符不是一个多字节字符. 返回与ASCII()函数返回的相同值. mysql> select ORD('2'); -> 50CONV(N,from_base,to_base) 在不同的数字基之间变换数字.返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL. 参数N解释为一个整数,但是可以指定为一个整数或一个字符串.最小基是2且最大的基是36.如果to_base是一个负数,N被认为 是一个有符号数,否则,N被当作无符号数. CONV以64位点精度工作. 3、CONV mysql> select CONV("a",16,2); -> '1010' mysql> select CONV("6E",18,8); -> '172' mysql> select CONV(-17,10,-18); -> '-H' mysql> select CONV(10+"10"+'10'+0xa,10,10); -> '40'BIN(N) 返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2).如果N是NULL,返回NULL. 4,Bin mysql> select BIN(12); -> '1100'OCT(N) 返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8).如果N是NULL,返回NULL. 5、OCT mysql> select OCT(12); -> '14'HEX(N) 返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16).如果N是NULL,返回NULL. 6、HEX mysql> select HEX(255); -> 'FF'CHAR(N,...) CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串.NULL值被跳过. 7、CHAR

2012-09-09

在Eclipse下使用SVN-CC-GIT-VSS-CVS代码管理工具最终版详细说明书

在Eclipse下使用SVN-CC-GIT-VSS-CVS代码管理工具最终版详细说明书

2012-09-05

sqlserver存储过程

---创建数据库 create database CRM; --删除数据库 drop database CRM; --创建一个表 if exists(select * from sysobjects where name='Users') drop table Users go create table Users( Id int identity(1,1) not null primary key, --顾客编号,主键 按一进行自动增长 UserName varchar(50)not null, PassWord varchar(50)not null, Address varchar(250)not null, ) go ----------------------------------------插入100条数据进Users表,进行下面对分页做准备---------------- Begin Declare @n bigint Declare @Sql nvarchar(225) set @n=0 While @n<100--导入100条相同的数据进Users表 Begin Set @Sql='Insert into Users Values(''jilongliang'',''123456'',''广东阳春'')' Exec &#40;@Sql&#41; set @n=@n+1 End End ------------查询一下是不是插入--------------- Select *from Users; -------------------------存储过程创建语法----------------------------------- /* 1.存储过程创建语法 create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], .... ] as SQL_statements */ --------------------------------------------------------------------------------- -------------------------- 带参存储过程----------------------------------- if (object_id('proc_find_users', 'P') is not null) drop proc proc_find_users go create proc proc_find_users(@startId int, @endId int) as ---between and 表示在那个两个数字之间 select * from users where Id between @startId and @endId go exec proc_find_users 42, 64; --------------------------------------------------------------------------------- --------------------------------带通配符参数存储过程----------------------------- if (object_id('proc_findUsersByName', 'P') is not null) drop proc proc_findUsersByName go create proc proc_findUsersByName(@UserName varchar(20) = '%j%', @nextName varchar(20) = '%') as select * from Users where UserName like @UserName and UserName like @nextName; go exec proc_findUsersByName; exec proc_findUsersByName '%l%', 'j%'; --------------------------------------------------------------------------------------- ----------------------------------------带输出参数存储过程--------------------------------------- if (object_id('proc_getUsersRecord', 'P') is not null) drop proc proc_getUsersRecord go create proc proc_getUsersRecord( @Id int, --默认输入参数 @UserName varchar(20) out, --输出参数 @address varchar(20) output --输入输出参数 ) as select @UserName = UserName, @address = address from Users where Id = @Id and Address = @address; go ---------------声明变量 declare @id int, @address varchar(20), @UserName varchar(20), @temp varchar(20); set @id = 71; set @temp = 1; exec proc_getUsersRecord @id, @UserName out, @temp output; select @UserName as 用户名, @temp as temp,@address as 地址; print @UserName + '#' + @temp; --------------------------------------------------------------------------------------- -----------------------------------不缓存存储过程--------------------------------------- --WITH RECOMPILE 不缓存 if (object_id('proc_temp', 'P') is not null) drop proc proc_temp go create proc proc_temp with recompile as select * from users; go exec proc_temp; -----------------------------------加密存储过程------------------------------------- --加密WITH ENCRYPTION if (object_id('proc_temp_encryption', 'P') is not null) drop proc proc_temp_encryption go create proc proc_temp_encryption with encryption as select * from users; go exec proc_temp_encryption; exec sp_helptext 'proc_temp'; exec sp_helptext 'proc_temp_encryption'; -----------------------------------带游标参数存储过程------------------------------------- if (object_id('proc_cursor', 'P') is not null) drop proc proc_cursor go create proc proc_cursor @cur cursor varying output as set @cur = cursor forward_only static for select Id, UserName, Address from Users; open @cur; go --调用 declare @exec_cur cursor; declare @Id int, @UserName varchar(50), @Address varchar(250); exec proc_cursor @cur = @exec_cur output;--调用存储过程 fetch next from @exec_cur into @Id, @UserName, @Address; while (@@fetch_status = 0) begin fetch next from @exec_cur into @Id, @UserName, @Address; print 'Id: ' + convert(varchar, @Id) + ', name: ' + @UserName + ', Address: ' + @Address; end close @exec_cur; deallocate @exec_cur;--删除游标 ---------------------------------------------------------- select * from sys.messages; --使用sysmessages中定义的消息 --------------------------------Query--------------------- Create PROCEDURE proc_LoginUser @userName varchar(50), @password varchar(50) as begin select UserName,PassWord from Users where UserName = @userName and PassWord = @PassWord end GO --这个Go注意不要放在Exec后面,否则报超出了存储过程、函数、 --触发器或视图的最大嵌套层数(最大层数为 32) exec proc_LoginUser @userName = 'admin',@PassWord = 'admin' --------------------------------Insert--------------------- Create proc proc_InsertUsers @UserName varchar(50), @PassWord varchar(50), @Address varchar(150) as insert into proc_InsertUsers values(@UserName,@PassWord,@Address) --------------------------------Update--------------------- --修改模块信息,根据模块Id Create proc proc_UpdateUser @UserName varchar(50), @PassWord varchar(50), @Address varchar(150), @Id int as update Users set UserName=@UserName,PassWord=@PassWord ,Address=@Address where Id = @Id --------------------------------Delete--------------------- Create proc proc_DeleteById @Id int as delete from Users where Id=@Id ----------------------------------------------------------- ------------------------------------------------------------------------------------- ----------------------------------分页存储过程-------------------------------------- ------------------------------------------------------------------------------------- If (object_id('pro_page', 'P') is not null) drop proc proc_Page GO create procedure proc_Page( @pageIndex int, @pageSize int ) as declare @startRow int, @endRow int --声明变量 set @startRow = (@pageIndex - 1) * @pageSize +1 --设值 set @endRow = @startRow + @pageSize -1 --设值 select ID,UserName,Address,PassWord,t.number from --t.number的行号 ( select ID,UserName,Address,PassWord, row_number() over (order by id asc) as number from Users ) t where t.number between @startRow and @endRow; GO ----执行 exec proc_Page 1, 3; -- 一页,三条数据 ------------------------------------------------------------------------------------- ---存储过程、row_number完成分页 if (object_id('pro_page', 'P') is not null) drop proc proc_cursor -- drop proc pro_page go create proc pro_Page @startIndex int, @endIndex int as select count(*) as Total from Users; --计算出来总数 select * from ( select row_number() over(order by Id) as rowId, * from Users ) temp where temp.rowId between @startIndex and @endIndex go exec pro_Page 1, 4 ------------------------------------------------------------------------------------- -------------------------------------数据库的函数-------------------------------------- exec sp_databases; --查看数据库 exec sp_tables; --查看表 exec sp_columns users;--查看列 exec sp_helpIndex users;--查看索引 exec sp_helpConstraint users;--约束 exec sp_stored_procedures; exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句 exec sp_rename users, stuInfo;--修改表、索引、列的名称 exec sp_renamedb myTempDB, myDB;--更改数据库名称 exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库 exec sp_helpdb;--数据库帮助,查询数据库信息 exec sp_helpdb master; ------------------------------------------------------------------------------------- ---------------------------数据库的sp_rename重命名函数------------------------------- --表重命名 exec sp_rename 'users', 'tb_users'; select * from tb_users; --列重命名 exec sp_rename 'tb_users.name', 'sName', 'column'; exec sp_help 'tb_users'; --重命名索引 exec sp_rename N'tb_users.idx_cid', N'idx_cidd', N'index'; exec sp_help 'tb_users'; --查询所有存储过程 select * from sys.objects where type = 'P'; select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

2012-09-03

超级有影响力霸气的Java面试题大全文档

超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗?  基本数据类型包括byte、int、char、long、float、double、boolean和short。  java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double  引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别  JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同?  异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 10、说出ArrayList,Vector, LinkedList的存储性能和特性  ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 11、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Ses

2012-07-18

Java常见的面试程序题

最常见的Java面试题大全的程序面试程序,很有影响力的哦!好好珍惜这个资料吧!有Java的常见面试题的冒泡,常见的算法,继承,多态 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装:  封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性:  多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

2012-07-18

张孝祥java就业面试宝典

孝祥java就业面试宝典,绝对的经典啊. ... 首页 资源分类 排行榜 帮助 高级搜索 · 下载频道>资源分类>开发技术>Java>张孝祥java就业面试宝典基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法,其他。有些题来自网上搜集整理,有些题来自传智播客学员面试后的反馈,说真的,少数一些网上的面试题,我真怀疑其是否还有存在价值!

2012-07-17

Android工程师面试题

百度 Android开发面试题 本文来自安卓航班网整理搜集 www.apkway.com 原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=2057 1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行, 都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进 程,所以说可以认为是同一个概念。 2、sim卡的EF 文件有何作用 sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的 3、嵌入式操作系统内存管理有哪几种,各有何特性 ? 页式,段式,段页,用到了MMU,虚拟空间等技术 4、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度 予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作 出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工 业控制、军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可 分为软实时和硬实时两种,而android是基于 linux内核的,因此属于软实时。 5、一条最长的短信息约占多少byte? 中文70(包括标点),英文160个字节 6、 android中的动画有哪几类,它们的特点和区别是什么? 两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方 式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame动画, 传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。 7、handler机制的原理 andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先 出原则。 Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Looper: 一个线程可以产生一个Looper 对象,由它来管理此线程里的 Message Queue(消息队列)。 2)Handler: 你可以构造Handler对象来与 Looper沟通,以便push新消息到 Message Queue里;或者接收Looper 从Message Queue取出)所送来的消息。 3) Message Queue(消息队列):用来存放线程放入的消息。 4)线程:UI thread 通常就是main thread,而Android启动程序时会替它 建立一个Message Queue。 8、说说mvc模式的原理,它在android 中的运用 MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC应用程序总是由这 三个部分组成。Event(事件)导致Controller 改变Model或View,或者同时改 变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都 会自动更新。类似的,只要Controller改变了View,View会 从潜在的Model中获取数据来刷新自己。 View重绘和内存泄露的好像是面试经常问的问题 1. View的刷新: 在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的 getmessage里面执行invaliate或者postinvaliate. 2. GC内存泄露 出现情况: 1.数据库的cursor没有关闭 2.构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建 view的对象,充分使用 contentview,可以使用一静态类来优化处理getview的过程/ 3.Bitmap对象不使用时采用recycle()释放内存 4.activity中的对象的生命周期大于activity 调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size] 还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层. 这篇文章会涉及到以下几个内容 一 Activity的生命周期 二 让Activity变成一个窗口:Activity 属性设定 三 你后台的Activity被系统 回收怎么办:onSaveInstanceState 四 调用与被调用:我们的通信使者 - Intent 一 Activity的生命周期 和其他手机 平台 的应用程序一样,Android的应用程序的生命周期是被统 一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不 能改变它,只能学习并适应它。 简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程 序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源, 至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。言归正传, Activity的基本生命周期如下代码所示: Java 代码 public class MyActivity extends Activity { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); } 你自己写的Activity会按需要 重 载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中, 他们被调用的顺序是 onCreate -> onStart ->onResume, 在Activity被干掉的 时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期, 但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的 一个Activity是全屏的那么:onPause->onStop ,恢复的时候 onStart->onResume ,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只 是onPause ,恢复 的时候onResume 。 详细介绍一下这几个方法中系统在做什么以及我们应该做什么: onCreate: 在这里创建界面,做一些数据的初始化工作 onStart: 到这一步变成用户可见不可交互的 onResume: 变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity 的最上面,运行完弹出栈,则回到上一个Activity) onPause: 到 这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情从上文的描 述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降 低,有可能被系统收回。在这里保存的数据,应该在 onResume里读出来,注意: 这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才 启动 onstop: 变得不可见,被下一个activity覆盖了 onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调 用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用 isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在 onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel 方法会抛异常的。 onPause,onstop, onDestroy,三种状态下 activity都有可能被系统干掉为 了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑 的内容都保存到存储介质上(一般 都是数据库)。实际工作中因为生命周期的 变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了, 你还要去维护那个线程,是暂停还是杀 掉还是数据回滚,是吧?因为Activity 可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都 是采用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问 题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟 大家分享。 二 让Activity变成一个窗口:Activity属性设定 讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东 西,那么很 简单你只需要设置一下Activity的主题就可以了在 AndroidManifest.xml 中定义 Activity的地方一句话: Xml代码 android :theme="@android:style/Theme.Dialog" android:theme="@android:style/Theme.Dialog" 这就使你的应用程序变成对话框的形式弹出来了,或者 Xml代码 android:theme="@android:style/Theme.Translucent" android:theme="@android:style/Theme.Translucent" 就 变成半透明的,[友情提示-.-]类似的这种activity的属性可以在 android.R.styleable 类的AndroidManifestActivity 方法中看到, AndroidManifest.xml中所有元素的属性的介绍都可以参考这个类 android.R.styleable 上面说的是属性名称,具体有什么值是在android.R.style中 可以看到,比如这个"@android:style/Theme.Dialog"就对应于 android.R.style.Theme_Dialog ,('_'换成'.' <--注意:这个是文章内容不是 笑脸)就可以用在描述文件 中了,找找类定义和描述文件中的对应关系就都明白了。 三 你后台的Activity被系统回收怎么办:onSaveInstanceState 当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的 Activity B 这个时候A会执行 Java代码 public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putLong("id", 1234567890); } public void onSaveInstanceState(Bundle outState) { B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有 被回收,被回 收的A就要重新调用onCreate()方法,不同于直接启动的是这 回 onCreate()里是带上参数 savedInstanceState,没被收回的就还是 onResume就好了。 savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你 维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate 就不会有它,所以用的时候要判断一下是否为空。 Java代码 if(savedInstanceState !=null){ long id =savedInstanceState.getLong("id"); } if(savedInstanceState !=null){ 就像官方的Notepad教程 里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记 住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。 这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不 需要特殊记住什么,哦, 没准你需要记住滚动条的位置... 四 调用与被调用:我们的通信使者Intent 要 说Intent了,Intent就是这个这个意图,应用程序间Intent进行交流,打 个电话啦,来个电话啦都会发Intent, 这个是Android架构的松耦合的精髓部 分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打 电话,很简单啊,看下代码先: Java代码 : Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+ number)); startActivity(intent); 复制代码 扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。 什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分 设计地确实很好啊。 那Intent通过什么来告诉系统需要谁来接受他呢? 通常使用Intent有两种方法,第一种是直接说明需要哪一个类来接收代码如 下: Java代码 Intent intent = new Intent(this,MyActivity.class); intent.getExtras().putString("id","1"); startActivity(intent); Intent intent = new Intent(this,MyActivity.class);intent.getExtras().putString("id","1"); tartActivity(intent);复制代码 第一种方式很明显,直接指定了MyActivity 为接受者,并且传了一些数据给 MyActivity,在MyActivity里可以用getIntent()来的到这个 intent 和数据。 第二种就需要先看一下AndroidMenifest中的 intentfilter的配置了 Xml代码 <intent-filter> <action android:name="android.intent.action.VIEW" /> <action android:value="android.intent.action.EDIT" /> <action android:value="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <action android:value="android.intent.action.EDIT" /> <action android:value="android.intent.action.PICK" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> </intent-filter> 这里面配置用到了action, data, category 这些东西,那么聪明的你一定想到 intent里也会有这些东西,然后一匹配不就找到接收者了吗? action其实就是一个意图的字符串名称。 上 面这段intent-filter的配置文件说明了这个Activity可以接受不同的 Action,当然相应的程序逻辑也不一样咯,提一下那个 mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider 就知道了, 必须指定 mimeType才能让数据被别人使用。 不知道原理说明白没,总结一句,就是你调用别的界面不是直接 new那个界面, 而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊, 而且符合了生命周期被系统管理的原则。 想知道category都有啥,Android为你预先定制好的action都有啥等等,请 亲自访问官方链接Intent ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每次 运行一个程序的时候是不是有一些信息比如: Starting activity: Intent {action=android.intent.action.MAINcategories={android.intent.category .LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera .GalleryPicker} } 再对照一下Intent的一些set方法,就知道怎么调用咯,希望你喜欢:) 一,listview你是怎么优化的。 二,view的刷新,之前说过 三,IPC及原理 四,Android多线程 五,Android为什么要设计 4大组件,他们之间的联系,不设计行不行(主要是 为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模 式做得很好【Technicolor的面试官问的这个】) 六,service的周期,activity的周期,谈下你对Android内部应用的了解,比 如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉 Android 怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。 在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术 点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这 个应用中做那个模块,用了多少个类之类的问题。 偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的? 当然我面试过很多家单位,有的是做平板,手机,数字电视,有的是做出个 erp 之类的客户端等等,出于前面的三个,基本上都是将 Android的全部改掉,如果 真正要做Android的话,大家要学的还很多。 总 之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不 管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的 普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样 你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说 过,技术 是不惜钱的,只要你有能力,多少钱他都请。 1.View如何刷新? 2.DDMS与TraceView的区别? 3.activity被回收了怎么办? 4.在Java中如何引入 C语言? 参考答案 : 1.View 可以调用invalidate()和postInvalidate()这两个方法刷新 2.DDMS是一个程序执行查看器,在里面你可以看见线程和堆栈等信息, TraceView是程序性能分析器 3.activity回收了,那就只有另起了 4.java调用C语言程序,可以用JNI接口来实现 上面答案仅作参考,毕竟我个人能力也有限嘛,难免会回答错误,呵呵..... 解答: 1.View受系统刷新(系统内部有个循环,监控事件、做业务处理、绘UI), 可以用postInvalidate()促使系统刷新。 2.(还真不知道) 3.请参照Activity生命周期,如果被系统destroy了,也就是说的回收,只 有从新start了 4.通过JNI调用。建议阅读《The Java Native InterfaceProgrammer's Guide and Specification》,英文版的,从sun网站下吧。

2012-07-17

Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud实现自动化构建镜像与部署详解

Docker+Jenkins+GitLab+Maven+SpringBoot&SpringCloud实现自动化构建镜像与部署详解 https://www.jianshu.com/p/bdb0642b7495 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用。 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲。 本文章主要讲述Docker、Jenkins、GitLab、Git、JDK、SpringBoot、Maven等技术结合实现自动化运维部署(DevOps)应用工程,适合SpringCloud部署。 初衷想法:在学习过程中遇到比较有趣的问题、然而花了点心血和时间去整理,然而进行梳理出来一份文章比较完整有知识体系的DevOps自动化构建与部署工程文章,技术知识内容比较多,而且文章内容较长,然而分了几个章程来讲述。

2023-01-27

xftp&xshell6.0.zip

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作

2020-03-29

银行ATM取款机系统项目案例实操

为了更好的了解SQL语法与知识体系 提高自身对SQL脚本的认识。如:SQL的结构,SQL的关键字的使用 在深入了解SQL之后可以提高自己的认知度, 比如:工作中不论是建表(建模)或是开发工作中,经过自身的学习,在不同的场景下使用它肯定会意想不到的收获的喜悦与丰收 SQL Server 2005 银行ATM取款机系统项目案例实操

2019-04-24

Kotlin +SpringBoot + MyBatis完美搭建最简洁最酷的前后端分离框架

Kotlin +SpringBoot + MyBatis完美搭建最简洁最酷的前后端分离框架

2019-03-19

Netty in Action和章节源代码

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序下载后压缩包中包含Netty in Action第五版英文版,Netty in Action阿里大牛精心翻译的中文版,还有本书的所有章节的源代码

2019-03-11

Hadoop权威指南中文版PDF

Hadoop权威指南_中文版,Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。

2019-03-10

OkHttpClientUtil封装类

封装OkHttp的异步求在子线程发起网络请求post,get,https请求代码类

2018-02-09

PMBOK6指南

【高清_PMBOK_第六版_中文版】PMBOK是Project Management Body Of Knowledge的缩写, 指项目管理知识体系的意思,具体是美国项目管理协会(PMI)对项目管理所需的知识、技能和工具进行的概括性描述。本平台这里带来了最新的PMBOK第六版指南中文版及英文版下载,需要的朋友可下载! 项目管理协会的资格认证之所以能在如此广的行业和地域范围内被迅速认可,首先是项目管理本身的重要性和实用性决定的,其次很大程度上是得益于该项认证体系本身的科学性。PMI早在七十年代末就率先提出了项目管理的知识体系(Project Management Body of Knowledge,简称为PMBOK)。 该知识体系构成项目管理职业资格认证考试的基础。它的第一版是由PMI组织了200多名世界各国项目管理专家历经四年才完成,可谓集世界项目管理界精英之大成,避免了一家之言的片面性。而更为科学的是每隔数年,来自于世界各地的项目管理精英会重新审查更新PMBOK的内容,使它始终保持最权威的地位。

2018-01-26

spring cloud zuul

Zuul的规则引擎允许通过任何JVM语言来编写规则和过滤器, 支持基于Java和Groovy的构建。(spring cloud zuul整合例子包能运行)

2018-01-25

Spring Cloud Hystrix

Spring Cloud Hystrix 实现了断路器、线路隔离等一系列服务保护功能(整合例子,包能运行)

2018-01-25

springcloud-Eureka

spring Cloud Netflix技术栈中,Eureka作为服务注册中心对整个微服务架构起着最核心的整合作用,因此对Eureka还是有很大的必要进行深入研究。(Eureka整合例子包能运行)

2018-01-25

spring cloud config

spring cloud config&bus;整合例子包能运行,包含rabbitmq

2018-01-25

Thinking In Java

《Thinking In Java》中文版 作者:Bruce Eckel 主页:http://www.BruceEckel.com 编译:Trans Bot 主页:http://member.netease.com/~transbot 致谢 --献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们! 指导您利用万维网的语言进行面向对象的程序设计 完整的正文、更新内容及程序代码可从http://www.bruceeckel.com下载 从Java 的基本语法到它最高级的特性(网络编程、高级面向对象能力、多线程),《Thinking In Java》都 能对您有所裨益。Bruce Eckel优美的行文以及短小、精悍的程序示例有助于您理解含义模糊的概念。 面向初学者和某种程度的专家 教授Java 语言,而不是与平台有关的理论 覆盖Java 1.2 的大多数重要方面:Swing 和新集合 系统讲述Java 的高级理论:网络编程、多线程处理、虚拟机性能以及同非Java 代码的连接 320个有用的Java 程序,15000 行以上代码 解释面向对象基本理论,从继承到设计方案 来自与众不同的获奖作者Bruce Eckel 可通过万维网免费索取源码和持续更新的本书电子版 从www.BruceEckel.com获得配套 CD(含15 小时以上的合成语音授课) 读者如是说:“最好的 Java 参考书⋯⋯绝对让人震惊”;“购买Java 参考书最明智的选择”;“我见过的 最棒的编程指南”。 Bruce Eckel也是《Thinking in C++》的作者,该书曾获1995 年 SoftwareDevelopment Jolt Award最佳书 籍大奖。作为一名有20经验的编程专家,曾教授过世界上许多地区的人进行对象编程。最开始涉及的领域是 C++,现在也进军 Java。他是C++标准协会有表决权的成员之一,曾就面向对象程序设计这一主题写过其他 5 本书,发表过150多篇文章,并是多家计算机杂志的专栏作家,其中包括《Web Techniques》的Java 专栏。 曾出席过C++和 Java 的“软件开发者会议”,并分获“应用物理”与“计算机工程”的学士和硕士学位。 读者的心声 比我看过的 Java 书好多了⋯⋯非常全面,举例都恰到好处,显得颇具“智慧”。和其他许多 Java 书 籍相比,我觉得它更成熟、连贯、更有说服力、更严谨。总之,写得非常好,肯定是一本学习 Java 的好书。(Anatoly Vorobey,TechnionUniversity,Haifa,以色列)。 是我见过的最好的编程指南,对任何语言都不外如是。(Joakim ziegler,FIX系统管理员) 感谢你写出如此优秀的一本Java 参考书。(Dr. Gavin Pillay,Registrar,King Edward VII Hospital,南非) 再次感谢您这本令人震惊的书。我以前真的有点儿不知所从的感觉(因为不是C 程序员),但你的书 浅显易懂,使我能很快掌握Java——差不多就是阅读的速度吧。能从头掌握基本原理和概念的感觉 真好,再也不用通过不断的试验和出错来建立概念模型了。希望不久能有机会参加您的讲座。 (Randall R. Hawley,Automation Technician,Eli Lilly & Co

2018-01-23

kubernetes指南

Kubernetes指南 Kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的 开源版本,也是CNCF最重要的项目之一,主要功能包括: 基于容器的应用部署、维护和滚动升级 负载均衡和服务发现 跨机器和跨地区的集群调度 自动伸缩 无状态服务和有状态服务 广泛的Volume支持 插件机制保证扩展性 Kubernetes发展非常迅速,已经成为容器编排领域的领导者。Kubernetes的中文资料也 非常丰富,但系统化和紧跟社区更新的则就比较少见了。《Kubernetes指南》开源电子 书旨在整理平时在开发和使用Kubernetes时的参考指南和实践总结,形成一个系统化的 参考指南以方便查阅。欢迎大家关注和添加完善内容。 注:如无特殊说明,本指南所有文档仅适用于Kubernetes v1.6及以上版本。

2018-01-23

高清Python核心编程_第3版_中文版

一、书籍简介 《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本。 《Python核心编程(第3版)》总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程、Microsoft Office编程、扩展Python等内容。 《Python 核心编程(第3版)》第2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架、云计算、高级Web服务。 《Python核心编程(第3版)》第3部分则为一个补充/实验章节,包括文本处理以及一些其他内容。 《Python核心编程(第3版)》适合具有一定经验的Python开发人员阅读。 二、书籍信息 作者:[美] Wesley Chun 著;孙波翔,李斌,李晗 译 出版社: 人民邮电出版社 ISBN:9787115414779 版次:3 外文名称:Core Python Applications Programming(3rd Edition) 开本:16开 出版时间:2016-05-01 正文语种:中文 三、书籍目录 第1部分 通用应用主题 第1章 正则表达式 2 1.1 简介/动机 3 1.2 特殊符号和字符 5 1.2.1 使用择一匹配符号匹配多个正则表达式模式 6 1.2.2 匹配任意单个字符 6 1.2.3 从字符串起始或者结尾或者单词边界匹配 7 1.2.4 创建字符集 8 1.2.5 限定范围和否定 8 1.2.6 使用闭包操作符实现存在性和频数匹配 9 1.2.7 表示字符集的特殊字符 10 1.2.8 使用圆括号指定分组 10 1.2.9 扩展表示法 11 1.3 正则表达式和Python语言 11 1.3.1 re模块:核心函数和方法 12 1.3.2 使用compile()函数编译正则表达式 13 1.3.3 匹配对象以及group()和groups()方法 14 1.3.4 使用match()方法匹配字符串 14 1.3.5 使用search()在一个字符串中查找模式(搜索与匹配的对比) 15 1.3.6 匹配多个字符串 16 1.3.7 匹配任何单个字符(.) 16 1.3.8 创建字符集([ ]) 17 1.3.9 重复、特殊字符以及分组 18 1.3.10 匹配字符串的起始和结尾以及单词边界 20 1.3.11 使用findall()和finditer()查找每一次出现的位置 21 1.3.12 使用sub()和subn()搜索与替换 22 1.3.13 在限定模式上使用split()分隔字符串 23 1.3.14 扩展符号 24 1.3.15 杂项 27 1.4 一些正则表达式示例 28 1.5 更长的正则表达式示例 33 1.5.1 匹配字符串 35 1.5.2 搜索与匹配……还有贪婪 37 1.6 练习 39 第2章 网络编程 42 2.1 简介 43 2.2 客户端/服务器架构 43 2.2.1 硬件客户端/服务器架构 43 2.2.2 软件客户端/服务器架构 44 2.2.3 银行出纳员作为服务器吗 44 2.2.4 客户端/服务器网络编程 45 2.3 套接字:通信端点 46 2.3.1 套接字 46 2.3.2 套接字地址:主机-端口对 47 2.3.3 面向连接的套接字与无连接的套接字 47 2.4 Python中的网络编程 48 2.4.1 socket()模块函数 49 2.4.2 套接字对象(内置)方法 49 2.4.3 创建TCP服务器 51 2.4.4 创建TCP客户端 54 2.4.5 执行TCP服务器和客户端 56 2.4.6 创建UDP服务器 58 2.4.7 创建UDP客户端 59 2.4.8 执行UDP服务器和客户端 60 2.4.9 socket模块属性 61 2.5 SocketServer模块 62 2.5.1 创建SocketServer TCP服务器 63 2.5.2 创建SocketServer TCP客户端 64 2.5.3 执行TCP服务器和客户端 65 2.6 Twisted框架介绍 66 2.6.1 创建Twisted ReactorTCP服务器 66 2.6.2 创建Twisted ReactorTCP客户端 67 2.6.3 执行TCP服务器和客户端 69 2.7 相关模块 69 2.8 练习 70 第3章 因特网客户端编程 74 3.1 因特网客户端简介 75 3.2 文件传输 75 3.2.1 文件传输因特网协议 75 3.2.2 文件传输协议 76 3.2.3 Python和FTP 77 3.2.4 ftplib.FTP类的方法 77 3.2.5 交互式FTP示例 78 3.2.6 客户端FTP程序示例 79 3.2.7 FTP的其他内容 80 3.3 网络新闻 81 3.3.1 Usenet与新闻组 81 3.3.2 网络新闻传输协议 82 3.3.3 Python和NNTP 83 3.3.4 nntplib.NNTP类方法 83 3.3.5 交互式NNTP示例 84 3.3.6 客户端程序NNTP示例 85 3.3.7 NNTP的其他内容 89 3.4 电子邮件 90 3.4.1 电子邮件系统组件和协议 90 3.4.2 发送电子邮件 91 3.4.3 Python和SMTP 92 3.4.4 smtplib.SMTP类方法 92 3.4.5 交互式SMTP示例 93 3.4.6 SMTP的其他内容 94 3.4.7 接收电子邮件 94 3.4.8 POP和IMAP 95 3.4.9 Python和POP3 95 3.4.10 交互式POP3示例 96 3.4.11 poplib.POP3类方法 97 3.4.12 客户端程序SMTP和POP3示例 98 3.4.13 Python和IMAP4 100 3.4.14 交互式IMAP4示例 100 3.4.15 imaplib.IMAP4类中的常用方法 101 3.5 实战 102 3.5.1 生成电子邮件 102 3.5.2 解析电子邮件 104 3.5.3 基于Web的云电子邮件服务 105 3.5.4 最佳实践:安全、重构 106 3.5.5 Yahoo! Mail 108 3.5.6 Gmail 112 3.6 相关模块 115 3.6.1 电子邮件 115 3.6.2 其他因特网客户端协议 115 3.7 练习 116 第4章 多线程编程 122 4.1 简介/动机 123 4.2 线程和进程 124 4.2.1 进程 124 4.2.2 线程 124 4.3 线程和Python 125 4.3.1 全局解释器锁 125 4.3.2 退出线程 126 4.3.3 在Python中使用线程 126 4.3.4 不使用线程的情况 126 4.3.5 Python的threading模块 128 4.4 thread模块 128 4.5 threading模块 132 4.5.1 Thread类 133 4.5.2 threading模块的其他函数 139 4.6 单线程和多线程执行对比 140 4.7 多线程实践 142 4.7.1 图书排名示例 142 4.7.2 同步原语 149 4.7.3 锁示例 149 4.7.4 信号量示例 156 4.8 生产者-消费者问题和Queue/queue模块 159 4.9 线程的替代方案 162 4.9.1 subprocess模块 163 4.9.2 multiprocessing模块 163 4.9.3 concurrent.futures模块 163 4.10 相关模块 165 4.11 练习 165 第5章 GUI编程 168 5.1 简介 169 5.1.1 Tcl、Tk和Tkinter 169 5.1.2 安装和使用Tkinter 170 5.1.3 客户端/服务端架构 170 5.2 Tkinter和Python编程 170 5.2.1 Tkinter模块:添加Tk到应用中 171 5.2.2 GUI编程介绍 171 5.2.3 顶层窗口:Tkinter.Tk() 173 5.2.4 Tk控件 173 5.3 Tkinter示例 174 5.3.1 Label控件 174 5.3.2 Button控件 175 5.3.3 Label和Button控件 175 5.3.4 Label、Button和Scale控件 176 5.3.5 偏函数应用示例 178 5.3.6 中级Tkinter示例 180 5.4 其他GUI简介 185 5.4.1 Tk接口扩展(Tix) 187 5.4.2 Python MegaWidgets(PMW) 188 5.4.3 wxWidgets和wxPython 188 5.4.4 GTK 和PyGTK 190 5.4.5 Tile/Ttk 192 5.5 相关模块和其他GUI 194 5.6 练习 196 第6章 数据库编程 198 6.1 简介 199 6.1.1 持久化存储 199 6.1.2 数据库基本操作和SQL 199 6.1.3 数据库和Python 201 6.2 Python的DB-API 203 6.2.1 模块属性 203 6.2.2 Connection对象 205 6.2.3 Cursor对象 206 6.2.4 类型对象和构造函数 207 6.2.5 关系数据库 209 6.2.6 数据库和Python:适配器 210 6.2.7 使用数据库适配器的示例 210 6.2.8 数据库适配器示例应用 215 6.3 ORM 226 6.3.1 考虑对象,而不是SQL 227 6.3.2 Python和ORM 227 6.3.3 员工角色数据库示例 228 6.3.4 SQLAlchemy 229 6.3.5 SQLObject 240 6.4 非关系数据库 245 6.4.1 NoSQL介绍 245 6.4.2 MongoDB 246 6.4.3 PyMongo:MongoDB和Python 246 6.4.4 总结 250 6.5 相关文献 250 6.6 练习 252 第7章 Microsoft Office编程 256 7.1 简介 257 7.2 使用Python进行COM客户端编程 257 7.2.1 客户端COM编程 258 7.2.2 入门 258 7.3 入门示例 259 7.3.1 Excel 259 7.3.2 Word 261 7.3.3 PowerPoint 262 7.3.4 Outlook 264 7.4 中级示例 266 7.4.1 Excel 266 7.4.2 Outlook 268 7.4.3 PowerPoint 273 7.4.4 总结 280 7.5 相关模块/包 281 7.6 练习 281 第8章 扩展Python 286 8.1 简介和动机 287 8.1.1 Python扩展简介 287 8.1.2 什么情况下需要扩展Python 288 8.1.3 什么情况下不应该扩展Python 288 8.2 编写Python扩展 289 8.2.1 创建应用代码 289 8.2.2 根据样板编写封装代码 291 8.2.3 编译 296 8.2.4 导入并测试 297 8.2.5 引用计数 300 8.2.6 线程和全局解释器锁 301 8.3 相关主题 302 8.3.1 SWIG 302 8.3.2 Pyrex 302 8.3.3 Cython 302 8.3.4 Psyco 303 8.3.5 PyPy 303 8.3.6 嵌入Python 304 8.4 练习 304 第2部分 Web开发 第9章 Web客户端和服务器 306 9.1 简介 307 9.1.1 Web应用:客户端/服务器计算 307 9.1.2 因特网 308 9.2 Python Web客户端工具 310 9.2.1 统一资源定位符 310 9.2.2 urlparse模块 312 9.2.3 urllib模块/包 313 9.2.4 使用urllib2 HTTP验证的示例 317 9.2.5 将HTTP验证示例移植到Python3中 319 9.3 Web客户端 322 9.3.1 一个简单的Web爬虫/蜘蛛/机器人 322 9.3.2 解析Web页面 328 9.3.3 可编程的Web浏览 333 9.4 Web(HTTP)服务器 336 9.5 相关模块 339 9.6 练习 341 第10章 Web编程:CGI和WSGI 345 10.1 简介 346 10.2 帮助Web服务器处理客户端数据 346 10.2.1 CGI简介 346 10.2.2 CGI应用程序 347 10.2.3 cgi模块 348 10.2.4 cgitb模块 348 10.3 构建CGI应用程序 349 10.3.1 构建Web服务器 349 10.3.2 建立表单页 351 10.3.3 生成结果页面 352 10.3.4 生成表单和结果页面 353 10.3.5 全面交互的Web站点 357 10.4 在CGI中使用Unicode 362 10.5 高级CGI 364 10.5.1 mulitipart表单提交和文件上传 364 10.5.2 多值字段 364 10.5.3 cookie 365 10.5.4 cookie和文件上传 365 10.6 WSGI简介 373 10.6.1 动机(替代CGI) 373 10.6.2 服务器集成 374 10.6.3 外部进程 374 10.6.4 WSGI简介 375 10.6.5 WSGI服务器 376 10.6.6 参考服务器 377 10.6.7 WSGI应用示例 378 10.6.8 中间件及封装WSGI应用 378 10.6.9 在Python 3中使用WSGI 379 10.7 现实世界中的Web开发 380 10.8 相关模块 380 10.9 练习 381 第11章 Web框架:Django 384 11.1 简介 385 11.2 Web框架 385 11.3 Django简介 386 11.4 项目和应用 390 11.4.1 在Django中创建项目 390 11.4.2 运行开发服务器 393 11.5 “Hello World”应用(一个博客) 394 11.6 创建模型来添加数据库服务 396 11.6.1 设置数据库 396 11.6.2 创��表 398 11.7 Python 应用shell 400 11.7.1 在Django中使用Pythonshell 400 11.7.2 测试数据模型 402 11.8 Django管理应用 403 11.8.1 设置admin 403 11.8.2 使用admin 404 11.9 创建博客的用户界面 410 11.9.1 创建模板 411 11.9.2 创建URL模式 412 11.9.3 创建视图函数 415 11.10 改进输出 418 11.11 处理用户输入 422 11.11.1 模板:添加HTML表单 423 11.11.2 添加URLconf项 423 11.11.3 视图:处理用户输入 423 11.11.4 跨站点请求伪造 424 11.12 表单和模型表单 426 11.12.1 Django表单简介 426 11.12.2 模型表单示例 427 11.12.3 使用ModelForm来生成HTML表单 427 11.12.4 处理ModelForm数据 428 11.13 视图进阶 429 11.14 改善外观 431 11.15 单元测试 432 11.15.1 blog应用的代码审查 434 11.15.2 blog应用总结 439 11.16 中级Django应用:TweetApprover 439 11.16.1 创建项目文件结构 440 11.16.2 安装Twython库 445 11.16.3 URL结构 446 11.16.4 数据模型 449 11.16.5 提交新推文以便审核 453 11.16.6 审核推文 457 11.17 资源 465 11.18 总结 465 11.19 练习 466 第12章 云计算:Google App Engine 470 12.1 简介 471 12.2 云计算 471 12.2.1 云计算服务的层次 472 12.2.2 App Engine 473 12.3 沙盒和App Engine SDK 476 12.4 选择一个App Engine框架 479 12.5 Python 2.7支持 485 12.5.1 一般差异 486 12.5.2 代码中的差异 486 12.6 与Django比较 487 12.6.1 开始“Hello World” 487 12.6.2 手动创建“Hello World”(Zip文件用户) 488 12.7 将“Hello World”改成一个 简单的博客 489 12.7.1 快速发现改动:30秒内将纯文本转成HTML 489 12.7.2 添加表单 490 12.7.3 添加Datastore服务 492 12.7.4 迭代改进 496 12.7.5 开发/SDK控制台 496 12.8 添加Memcache服务 502 12.9 静态文件 505 12.10 添加用户服务 505 12.10.1 Google账号验证 506 12.10.2 联合验证 507 12.11 远程API shell 507 12.12 问与答(Python实现) 509 12.12.1 发送电子邮件 509 12.12.2 接收电子邮件 510 12.13 使用XMPP发送即时消息 512 12.14 处理图片 514 12.15 任务队列(非定期任务) 514 12.15.1 创建任务 515 12.15.2 配置app.yaml 515 12.15.3 其他任务创建选项 516 12.15.4 将发送电子邮件作为任务 517 12.15.5 deferred包 519 12.16 使用Appstats进行分析 520 12.16.1 在app.yaml中添加标准处理程序 521 12.16.2 添加自定义Admin Console页面 521 12.16.3 作为内置界面启用界面 521 12.17 URLfetch服务 522 12.18 问与答(无Python实现) 522 12.18.1 Cron服务(计划任务作业) 523 12.18.2 预热请求 523 12.18.3 DoS保护 524 12.19 厂商锁定 524 12.20 资源 525 12.21 总结 526 12.22 练习 527 第13章 Web服务 530 13.1 简介 531 13.2 Yahoo!金融股票报价服务器 531 13.3 Twitter微博 534 13.3.1 社交网络 534 13.3.2 Twitter和Python 535 13.3.3 稍微长一点的API组合应用示例 537 13.3.4 总结 547 13.3.5 额外在线资源 548 13.4 练习 548 第3部分 补充/实验章节 第14章 文本处理 553 14.1 逗号分隔值(CSV) 554 14.1.1 CSV简介 554 14.1.2 再论股票投资组合示例 556 14.2 JSON 557 14.3 可扩展标记语言 561 14.3.1 XML简介 562 14.3.2 Python和XML 562 14.3.3 XML实战 566 14.3.4 *使用XML-RPC的客户端-服务器服务 569 14.4 参考文献 573 14.5 相关模块 574 14.6 练习 574 第15章 其他内容 577 15.1 Jython 578 15.1.1 Jython简介 578 15.1.2 Swing GUI开发示例 579 15.2 Google 581 15.2.1 Google 平台简介 582 15.2.2 Python和Google API 582 15.2.3 一个简单的社交媒体分析工具 582 15.3 练习 590 附录A 部分练习参考答案 593 附录B 参考表 597 B.1 Python关键字 597 B.2 Python标准操作符和函数 598 B.3 数值类型操作符和函数 599 B.4 序列类型操作符和函数 600 B.5 字符串格式化操作符转换符号 602 B.6 字符串格式化操作符指令 603 B.7 字符串类型内置方法 603 B.8 列表类型内置方法 605 B.9 字典类型内置方法 605 B.10 集合类型操作符和内置函数 606 B.11 文件对象方法和数据属性 607 B.12 Python异常 608 B.13 类的特殊方法 610 B.14 Python操作符汇总 612 附录C Python 3:一种编程语言进化的产物 614 C.1 为何Python在变化 614 C.2 都发生了哪些变化 615 C.2.1 print变成了print() 615 C.2.2 字符串:默认为Unicode编码 616 C.2.3 单类类型 616 C.2.4 更新异常的语法 617 C.2.5 整数的更新 618 C.2.6 迭代器无处不在 619 C.3 迁移工具 619 C.3.1 2to3工具 619 C.3.2 Python 2.6 620 C.4 结论 620 C.5 参考资料 620 附录D 利用Python 2.6 向Python 3迁移 622 D.1 Python 3:Python的下一代 622 D.2 整数 623 D.2.1 单整数类型 624 D.2.2 新型二进制和改进的八进制字符 624 D.2.3 经典除法或真除法 625 D.3 内置函数 626 D.3.1 print语句或print()函数 626 D.3.2 reduce()转移到了functools模块中 627 D.3.3 其他更新 627 D.4 面向对象编程:两种不同的类对象 628 D.5 字符串 629 D.6 异常 630 D.6.1 处理异常(使用as) 630 D.6.2 抛出异常 630 D.7 其他转换工具和技巧 631 D.8 编写兼容版本2.x和3.x的代码 632 D.8.1 对比print和print() 632 D.8.2 将你的方法导入解决方案中 633 D.8.3 整合在一起 634 D.9 结论 635

2017-10-30

高清Netty5.0架构剖析和源码解读

Netty5.0 架构剖析和源码解读 作者:李林锋 版权所有 email neu_lilinfeng@ © Netty5.0 架构剖析和源码解读1 1. 概述2 1.1. JAVA 的IO演进2 1.1.1. 传统BIO通信的弊端2 1.1.2. Linux 的网络IO模型简介4 1.1.3. IO复用技术介绍7 1.1.4. JAVA的异步IO8 1.1.5. 业界主流的NIO框架介绍10 2.NIO入门10 2.1. NIO服务端10 2.2. NIO客户端13 3.Netty源码分析16 3.1. 服务端创建16 3.1.1. 服务端启动辅助类ServerBootstrap16 3.1.2. NioServerSocketChannel 的注册21 3.1.3. 新的客户端接入25 3.2. 客户端创建28 3.2.1. 客户端连接辅助类Bootstrap28 3.2.2. 服务端返回ACK应答,客户端连接成功32 3.3. 读操作33 3.3.1. 异步读取消息33 3.4. 写操作39 3.4.1. 异步消息发送39 3.4.2. Flush操作42 4.Netty架构50 4.1. 逻辑架构50 5. 附录51 5.1. 作者简介51 5.2. 使用声明51 1. 概述 1.1.JAVA 的IO演进 1.1.1. 传统BIO通信的弊端 在JDK 1.4推出JAVANIO1.0之前,基于JAVA 的所有Socket通信都采用 BIO 了同步阻塞模式( ),这种一请求一应答的通信模型简化了上层的应用开发, 但是在可靠性和性能方面存在巨大的弊端。所以,在很长一段时间,大型的应 C C++ 用服务器都采用 或者 开发。当并发访问量增大、响应时间延迟变大后, 采用JAVABIO作为服务端的软件只有通过硬件不断的扩容来满足访问量的激 增,它大大增加了企业的成本,随着集群的膨胀,系统的可维护性也面临巨大 的挑战,解决这个问题已经刻不容缓。 首先,我们通过下面这幅图来看下采用BIO 的服务端通信模型:采用BIO 通信模型的 1connect NewThread1 WebBrowse 2connect 2handle(Req) WebBrowse 3connect Acceptor NewThread2 WebBrowse WebBrowse 4connect NewThread3 3sendResponsetopeer NewThread4 图1.1.1-1 BIO通信模型图 服务端,通常由一个独立的Accepto 线程负责监听客户端的连接,接收到客户 端连接之后为客户端连接创建一个新的线程处理请求消息

2017-10-13

weinxinpay

H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。 主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付

2017-09-29

支付宝源码demo

【旧版本】 下载之后解压有【MD5签名版本和RSA签名版本】文件 MD5签名版本 |————create_direct_pay_by_user-CSHARP-GBK |————create_direct_pay_by_user-CSHARP-UTF-8 |————create_direct_pay_by_user-JAVA-GBK |————create_direct_pay_by_user-JAVA-UTF-8 |————create_direct_pay_by_user-PHP-GBK |————create_direct_pay_by_user-PHP-UTF-8 |————alipay.acquire.customs-CSHARP-GBK |————alipay.acquire.customs-CSHARP-UTF-8 |————alipay.acquire.customs-JAVA-GBK |————alipay.acquire.customs-JAVA-UTF-8 |————alipay.acquire.customs-PHP-GBK |————alipay.acquire.customs-PHP-UTF-8 RSA签名版本 |————create_direct_pay_by_user-CSHARP-GBK |————create_direct_pay_by_user-CSHARP-UTF-8 |————create_direct_pay_by_user-JAVA-GBK |————create_direct_pay_by_user-JAVA-UTF-8 |————create_direct_pay_by_user-PHP-GBK |————create_direct_pay_by_user-PHP-UTF-8 |————alipay.acquire.customs-CSHARP-GBK |————alipay.acquire.customs-CSHARP-UTF-8 |————alipay.acquire.customs-JAVA-GBK |————alipay.acquire.customs-JAVA-UTF-8 |————alipay.acquire.customs-PHP-GBK |————alipay.acquire.customs-PHP-UTF-8 【新版本】 支付宝项目工程源码---Alipay-Source 支付宝官方例子工程源码---alipay.trade.page.pay-JAVA-UTF-8

2017-08-17

SQL脚本生成器

一、简介 1.1前言 1、由于最近工作一直用Oracle,故对Oracle数据库研究为对象。 2、根据工作业务需求实际情况进行功能研发。为什么要开发呢?因为在数据库升级或者迁移的时候,为了保证不同环境不同数据库数据保持同步,故数据库SQL脚本非常作用。比如:数据库主脚本,副脚本,增量脚本。 3、 什么是主脚本、副脚本、增量脚本呢? 3.1、主脚本指数据库表或存储过程,视图脚本,序列等脚本。 3.2、副脚本指必须执行主脚本之后才执行的脚本。换句话说在没执行主键脚本的情况下,副脚本执行之后会回滚事务失败。 3.3、增量脚本指在执行主脚本或副脚本之后,根据需求对某个表添加/修改约束(主外键约束,长度约束等),添加/修改字段/添加数据等情况对数据库结构改变处理的一种行为脚本。 1.2作用 1、 快速产出自定义规则需要的SQL脚本。 2、减少人工编写SQL脚本出错率问题,完全通过程序检测SQL准确性。 3、帮助开发人员提高SQL编写效率,减少人工编写SQL开发成本问题。 4、帮助开发人员节约时间,同时避免繁琐不必要编写SQL的工作。 二、实现方式与原理 2.1实现方式 1、实现方式分:正向与逆向实现。什么是正向与逆行呢【是否有鸡还是有蛋,先后道理同等】 2、正向方式:首先把设计好数据库表文档,把所有表的字段属性配置到EXCEL或者CSV格式的文件通过JXL/POI技术去读取文件的字段,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 3、逆向方式:首先有数据库表,然后通过ORM持久化技术连接数据库再读取表的字段等属性出来,再通过其他技术一系列程序处理之后生成所需要的SQL脚本。 2.2原理 对数据库软件内置核心表或视图查询出来存储用户行为表结构所有属性信息,对此属性结构信息进行分析与组装所需要SQL脚本。

2017-03-29

阿里巴巴Java开发手册

目录 一 、编程规约 编程规约 ................................................................................................................................................................................ 1 ( ( 一) ) 命名规约 命名规约 ................................................................................................................................................................ 1 ( ( 二) ) 常量定义 常量定义 ................................................................................................................................................................ 3 ( ( 三) ) 格式规约 格式规约 ................................................................................................................................................................ 4 ( ( 四) ) P OOP 规约 规约 ................................................................................................................................................................ 6 ( ( 五) ) 集合处理 集合处理 ............................................................................................................................................................. 10 ( ( 六) ) 并发处理 并发处理 ............................................................................................................................................................. 12 ( ( 七) ) 控制语句 控制语句 ............................................................................................................................................................. 15 ( ( 八) ) 注释规约 注释规约 ............................................................................................................................................................. 16 ( ( 九) ) 其它 其它 ....................................................................................................................................................................... 17 二、异常日志 二、异常日志 ............................................................................................................................................................................. 19 ( ( 一) ) 异常处理 异常处理 ............................................................................................................................................................. 19 ( ( 二) ) 日志规约 日志规约 ............................................................................................................................................................. 20 三、 三、L MySQL 规约 规约 ....................................................................................................................................................................... 22 ( ( 一) ) 建表规约 建表规约 ............................................................................................................................................................. 22 ( ( 二) ) 索引规约 索引规约 ............................................................................................................................................................. 23 ( ( 三) ) L SQL 规约 规约 ............................................................................................................................................................. 25 ( ( 四) ) M ORM 规约 规约 ............................................................................................................................................................. 26 四、工程规约 四、工程规约 ............................................................................................................................................................................. 27 ( ( 一) ) 应用分层 应用分层 ............................................................................................................................................................. 27 ( ( 二) ) 二方库规约 二方库规约 ......................................................................................................................................................... 28 ( ( 三) ) 服务器规约 服务器规约 ......................................................................................................................................................... 30 五、安全规约 五、安全规约 ............................................................................................................................................................................. 31

2017-02-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除