guanxf

我的博客:http://blog.sina.com.cn/17learning

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  71 随笔 :: 1 文章 :: 41 评论 :: 0 Trackbacks

2013年3月14日 #


createTree(1, orgNodeTree, sameOrgNodes, 0);


@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class NodeTree {
private String pName;
private String name;
private int level;
private List<NodeTree> children;
}

private void createTree(int leave, int ind, Map<String, NodeTree> pIndexNodeNameMap, List<NodeVo> childNodes) {
Map<String, NodeTree> cIndexNodeNameMap = new HashMap();
//构建树
int treeNo = pIndexNodeNameMap.size();
if (treeNo == 0) {
return;
}
int group = 0;
for (int i = ind; i < childNodes.size(); i++) {
NodeVo node = childNodes.get(i);
long index = node.getId() % treeNo;
NodeTree pNode = pIndexNodeNameMap.get(index + "");
List<NodeTree> children = pNode.getChildren();
if (CollectionUtils.isEmpty(children)) {
children = new ArrayList();
}
if (children.size() > 2) {
leave++;
createTree(leave, i, cIndexNodeNameMap, childNodes);
break;
} else {
NodeTree child = new NodeTree();
child.setLevel(leave);
child.setPName(pNode.getName());
child.setName(node.getNodeName());
children.add(child);
pNode.setChildren(children);
cIndexNodeNameMap.put(group + "", child);
group++;
}
}
}


private boolean createTree(int level, List<NodeTree> parentNodes, List<NodeVo> childNodes, int beginIndex) {
//构建树
List<NodeTree> nextLevelNodes = new ArrayList<>();
for (int i = beginIndex; i < childNodes.size(); i++) {
int parentCount = 1;
for (NodeTree pNode : parentNodes) {
List<NodeTree> children = pNode.getChildren();
if (CollectionUtils.isEmpty(children)) {
children = new ArrayList();
pNode.setChildren(children);
}
if (children.size() >= 3) {
if(parentCount >= parentNodes.size()){
return createTree(++level, nextLevelNodes, childNodes, beginIndex);
}
} else {
if (beginIndex >= childNodes.size()) {
return true;
}
NodeTree child = new NodeTree();
child.setLevel(level);
child.setPName(pNode.getName());
NodeVo node = childNodes.get(beginIndex);
child.setName(node.getNodeName());
pNode.getChildren().add(child);
nextLevelNodes.add(child);
beginIndex++;
}
parentCount++;
}
}
return true;
}
posted @ 2020-09-07 09:56 管先飞 阅读(247) | 评论 (0)编辑 收藏

执行命名:
git pull github master --allow-unrelated-histories

执行结果如下:

E:\WorkSpace\workspaceJ2ee\abocode\jfaster>git pull github master --allow-unrelated-histories
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Unpacking objects: 100% (3/3), done.
From https://github.com/abocode/jfaster
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> github/master
Merge made by the 'recursive' strategy.
 .gitattributes | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 .gitattributes
posted @ 2018-05-20 12:30 管先飞 阅读(310) | 评论 (0)编辑 收藏

进入“控制面板”——“用户账户”-凭据管理器——windows凭据

找到了git的用户名密码。修改正确后ok

posted @ 2018-05-20 12:29 管先飞 阅读(249) | 评论 (0)编辑 收藏

元注解:

  元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
    1.@Target,
    2.@Retention,
    3.@Documented,
    4.@Inherited

  这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。
以下为一个简单场景的应用:
 1.定义注解:
   
@Target(TYPE)
@Retention(RUNTIME)
public @interface Table {
/**
* (Optional) The name of the table.
* <p/>
* Defaults to the entity name.
*/
String name() default "";
}
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface Column {

/**
* (Optional) The name of the column. Defaults to
* the property or field name.
*/
String name() default "";
}
2、定义实体类:
  

@Table(name = "t_s_user")
public class User {
@Column(name="name")
private String name;

@Column(name="pwd")
private String pwd;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPwd() {
return pwd;
}

public void setPwd(String pwd) {
this.pwd = pwd;
}
}

3、运行:

public static void print() {
System.out.println("table's name" + User.class.getAnnotation(Table.class).name());
Field[] fields = User.class.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
System.out.println("field's type:" + field.getType().getName());
System.out.println("field's columnName:" + field.getAnnotation(Column.class).name());
}
}

关于注解的详细介绍:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html
posted @ 2016-08-18 20:42 管先飞 阅读(2827) | 评论 (0)编辑 收藏

1.选择:File->project structure->libraries

2.左上角选择添加,选择添加java(还提供了添加maven项目),然后选择所需要的目录:

3.idea 会提示选择添加什么类型的文件,我们是单纯的文件,所以选择classes

   

 
posted @ 2016-04-29 15:42 管先飞 阅读(1689) | 评论 (0)编辑 收藏

nginx 反向代理到 apache
server {
        listen       80;
        server_name  app.haeee.com;
index index.html index.htm index.php;
   root /alidata/www/movie-app;
     error_page 404 500 502 503 504 http://app.haeee.com; 
location ~ .*\.(php|php5)?$
{
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#伪静态规则
#include /alidata/server/nginx/conf/rewrite/phpwind.conf;
access_log  /alidata/log/nginx/access/movie-app.log;
}

nginx 反向代理到 tomcat
server {
    listen   80;
    server_name  hulasou.com www.hulasou.com;
index index.html index.htm index.jsp;
#location ~ .*\.(jsp)?$
location /{      
index index.jsp;
        proxy_pass http://localhost:8181;
}
#伪静态规则
include /alidata/server/nginx/conf/rewrite/uuxiaohua.conf;
access_log  /alidata/log/nginx/access/uuxiaohua.log;
}
posted @ 2016-01-19 17:46 管先飞 阅读(392) | 评论 (0)编辑 收藏

1、修改启动项:
@SpringBootApplication
@ComponentScan
@Import({DBConfiguration.class, ResourceConfiguration.class,AppConfiguration.class})
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
2、修改pom文件:
    修改packaging
    <packaging>war</packaging>
  加入打包到tomcat的配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-legacy</artifactId>
<version>1.0.2.RELEASE</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>

<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>

3、如果不需要JMX在application.properties文件中加入配置项:
endpoints.jmx.uniqueNames=true
或者直接关闭:
 endpoints.jmx.enabled=false
posted @ 2016-01-14 17:21 管先飞 阅读(6550) | 评论 (1)编辑 收藏

spring data 系列一直是开发者追捧的热潮,而官方并未出spring data  jdbc,国外一个开发者让我们看到了福音,文档如下供大家共同学习。

Build Status Maven Central

Spring Data JDBC generic DAO implementation

The purpose of this project is to provide generic, lightweight and easy to use DAO implementation for relational databases based on JdbcTemplate from Spring framework, compatible with Spring Data umbrella of projects.

Design objectives

  • Lightweight, fast and low-overhead. Only a handful of classes, no XML, annotations, reflection
  • This is not full-blown ORM. No relationship handling, lazy loading, dirty checking, caching
  • CRUD implemented in seconds
  • For small applications where JPA is an overkill
  • Use when simplicity is needed or when future migration e.g. to JPA is considered
  • Minimalistic support for database dialect differences (e.g. transparent paging of results)

Features

Each DAO provides built-in support for:

  • Mapping to/from domain objects through RowMapper abstraction
  • Generated and user-defined primary keys
  • Extracting generated key
  • Compound (multi-column) primary keys
  • Immutable domain objects
  • Paging (requesting subset of results)
  • Sorting over several columns (database agnostic)
  • Optional support for many-to-one relationships
  • Supported databases (continuously tested):
    • MySQL
    • PostgreSQL
    • H2
    • HSQLDB
    • Derby
    • MS SQL Server (2008, 2012)
    • Oracle 10g / 11g (9i should work too)
    • ...and most likely many others
  • Easily extendable to other database dialects via SqlGenerator class.
  • Easy retrieval of records by ID

API

Compatible with Spring Data PagingAndSortingRepository abstraction, all these methods are implemented for you:

public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
 T  save(T entity);
Iterable<T> save(Iterable<? extends T> entities);
 T  findOne(ID id);
boolean exists(ID id);
Iterable<T> findAll();
   long count();
   void delete(ID id);
   void delete(T entity);
   void delete(Iterable<? extends T> entities);
   void deleteAll();
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
Iterable<T> findAll(Iterable<ID> ids);
}

Pageable and Sort parameters are also fully supported, which means you get paging and sorting by arbitrary properties for free. For example say you have userRepository extending PagingAndSortingRepository<User, String> interface (implemented for you by the library) and you request 5th page of USERS table, 10 per page, after applying some sorting:

Page<User> page = userRepository.findAll(
new PageRequest(
5, 10, 
new Sort(
new Order(DESC, "reputation"), 
new Order(ASC, "user_name")
)
)
);

Spring Data JDBC repository library will translate this call into (PostgreSQL syntax):

SELECT *
FROM USERS
ORDER BY reputation DESC, user_name ASC
LIMIT 50 OFFSET 10

...or even (Derby syntax):

SELECT * FROM (
SELECT ROW_NUMBER() OVER () AS ROW_NUM, t.*
FROM (
SELECT * 
FROM USERS 
ORDER BY reputation DESC, user_name ASC
) AS t
) AS a 
WHERE ROW_NUM BETWEEN 51 AND 60

No matter which database you use, you'll get Page<User> object in return (you still have to provide RowMapper<User> yourself to translate from ResultSet to domain object). If you don't know Spring Data project yet, Page<T> is a wonderful abstraction, not only encapsulating List<T>, but also providing metadata such as total number of records, on which page we currently are, etc.

Reasons to use

  • You consider migration to JPA or even some NoSQL database in the future.

    Since your code will rely only on methods defined in PagingAndSortingRepository and CrudRepository from Spring Data Commons umbrella project you are free to switch from JdbcRepository implementation (from this project) to: JpaRepository, MongoRepository, GemfireRepository or GraphRepository. They all implement the same common API. Of course don't expect that switching from JDBC to JPA or MongoDB will be as simple as switching imported JAR dependencies - but at least you minimize the impact by using same DAO API.

  • You need a fast, simple JDBC wrapper library. JPA or even MyBatis is an overkill

  • You want to have full control over generated SQL if needed

  • You want to work with objects, but don't need lazy loading, relationship handling, multi-level caching, dirty checking... You need CRUD and not much more

  • You want to by DRY

  • You are already using Spring or maybe even JdbcTemplate, but still feel like there is too much manual work

  • You have very few database tables

Getting started

For more examples and working code don't forget to examine project tests.

Prerequisites

Maven coordinates:

<dependency>
<groupId>com.nurkiewicz.jdbcrepository</groupId>
<artifactId>jdbcrepository</artifactId>
<version>0.4</version>
</dependency>

This project is available under maven central repository.

Alternatively you can download source code as ZIP.


In order to start your project must have DataSource bean present and transaction management enabled. Here is a minimal MySQL configuration:

@EnableTransactionManagement
@Configuration
public class MinimalConfig {
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public DataSource dataSource() {
MysqlConnectionPoolDataSource ds = new MysqlConnectionPoolDataSource();
ds.setUser("user");
ds.setPassword("secret");
ds.setDatabaseName("db_name");
return ds;
}
}

Entity with auto-generated key

Say you have a following database table with auto-generated key (MySQL syntax):

CREATE TABLE COMMENTS (
id INT AUTO_INCREMENT,
user_name varchar(256),
contents varchar(1000),
created_time TIMESTAMP NOT NULL,
PRIMARY KEY (id)
);

First you need to create domain object User mapping to that table (just like in any other ORM):

public class Comment implements Persistable<Integer> {
private Integer id;
private String userName;
private String contents;
private Date createdTime;
@Override
public Integer getId() {
return id;
}
@Override
public boolean isNew() {
return id == null;
}
//getters/setters/constructors/...
}

Apart from standard Java boilerplate you should notice implementing Persistable<Integer> where Integer is the type of primary key. Persistable<T> is an interface coming from Spring Data project and it's the only requirement we place on your domain object.

Finally we are ready to create our CommentRepository DAO:

@Repository
public class CommentRepository extends JdbcRepository<Comment, Integer> {
public CommentRepository() {
super(ROW_MAPPER, ROW_UNMAPPER, "COMMENTS");
}
public static final RowMapper<Comment> ROW_MAPPER = //see below
private static final RowUnmapper<Comment> ROW_UNMAPPER = //see below
@Override
protected <S extends Comment> S postCreate(S entity, Number generatedId) {
entity.setId(generatedId.intValue());
return entity;
}
}

First of all we use @Repository annotation to mark DAO bean. It enables persistence exception translation. Also such annotated beans are discovered by CLASSPATH scanning.

As you can see we extend JdbcRepository<Comment, Integer> which is the central class of this library, providing implementations of all PagingAndSortingRepository methods. Its constructor has three required dependencies: RowMapper, RowUnmapper and table name. You may also provide ID column name, otherwise default "id" is used.

If you ever used JdbcTemplate from Spring, you should be familiar with RowMapper interface. We need to somehow extract columns from ResultSet into an object. After all we don't want to work with raw JDBC results. It's quite straightforward:

public static final RowMapper<Comment> ROW_MAPPER = new RowMapper<Comment>() {
@Override
public Comment mapRow(ResultSet rs, int rowNum) throws SQLException {
return new Comment(
rs.getInt("id"),
rs.getString("user_name"),
rs.getString("contents"),
rs.getTimestamp("created_time")
);
}
};

RowUnmapper comes from this library and it's essentially the opposite of RowMapper: takes an object and turns it into a Map. This map is later used by the library to construct SQL CREATE/UPDATE queries:

private static final RowUnmapper<Comment> ROW_UNMAPPER = new RowUnmapper<Comment>() {
@Override
public Map<String, Object> mapColumns(Comment comment) {
Map<String, Object> mapping = new LinkedHashMap<String, Object>();
mapping.put("id", comment.getId());
mapping.put("user_name", comment.getUserName());
mapping.put("contents", comment.getContents());
mapping.put("created_time", new java.sql.Timestamp(comment.getCreatedTime().getTime()));
return mapping;
}
};

If you never update your database table (just reading some reference data inserted elsewhere) you may skip RowUnmapper parameter or use MissingRowUnmapper.

Last piece of the puzzle is the postCreate() callback method which is called after an object was inserted. You can use it to retrieve generated primary key and update your domain object (or return new one if your domain objects are immutable). If you don't need it, just don't override postCreate().

Check out JdbcRepositoryGeneratedKeyTest for a working code based on this example.

By now you might have a feeling that, compared to JPA or Hibernate, there is quite a lot of manual work. However various JPA implementations and other ORM frameworks are notoriously known for introducing significant overhead and manifesting some learning curve. This tiny library intentionally leaves some responsibilities to the user in order to avoid complex mappings, reflection, annotations... all the implicitness that is not always desired.

This project is not intending to replace mature and stable ORM frameworks. Instead it tries to fill in a niche between raw JDBC and ORM where simplicity and low overhead are key features.

Entity with manually assigned key

In this example we'll see how entities with user-defined primary keys are handled. Let's start from database model:

CREATE TABLE USERS (
user_name varchar(255),
date_of_birth TIMESTAMP NOT NULL,
enabled BIT(1) NOT NULL,
PRIMARY KEY (user_name)
);

...and User domain model:

public class User implements Persistable<String> {
private transient boolean persisted;
private String userName;
private Date dateOfBirth;
private boolean enabled;
@Override
public String getId() {
return userName;
}
@Override
public boolean isNew() {
return !persisted;
}
public void setPersisted(boolean persisted) {
this.persisted = persisted;
}
//getters/setters/constructors/...
}

Notice that special persisted transient flag was added. Contract of [CrudRepository.save()](http://static.springsource.org/spring-data/data-commons/docs/current/api/org/springframework/data/repository/CrudRepository.html#save(S)) from Spring Data project requires that an entity knows whether it was already saved or not (isNew()) method - there are no separate create() and update() methods. Implementing isNew() is simple for auto-generated keys (see Comment above) but in this case we need an extra transient field. If you hate this workaround and you only insert data and never update, you'll get away with return true all the time from isNew().

And finally our DAO, UserRepository bean:

@Repository
public class UserRepository extends JdbcRepository<User, String> {
public UserRepository() {
super(ROW_MAPPER, ROW_UNMAPPER, "USERS", "user_name");
}
public static final RowMapper<User> ROW_MAPPER = //...
public static final RowUnmapper<User> ROW_UNMAPPER = //...
@Override
protected <S extends User> S postUpdate(S entity) {
entity.setPersisted(true);
return entity;
}
@Override
protected <S extends User> S postCreate(S entity, Number generatedId) {
entity.setPersisted(true);
return entity;
}
}

"USERS" and "user_name" parameters designate table name and primary key column name. I'll leave the details of mapper and unmapper (see source code). But please notice postUpdate() and postCreate() methods. They ensure that once object was persisted, persisted flag is set so that subsequent calls to save() will update existing entity rather than trying to reinsert it.

Check out JdbcRepositoryManualKeyTest for a working code based on this example.

Compound primary key

We also support compound primary keys (primary keys consisting of several columns). Take this table as an example:

CREATE TABLE BOARDING_PASS (
flight_no VARCHAR(8) NOT NULL,
seq_no INT NOT NULL,
passenger VARCHAR(1000),
seat CHAR(3),
PRIMARY KEY (flight_no, seq_no)
);

I would like you to notice the type of primary key in Persistable<T>:

public class BoardingPass implements Persistable<Object[]> {
private transient boolean persisted;
private String flightNo;
private int seqNo;
private String passenger;
private String seat;
@Override
public Object[] getId() {
return pk(flightNo, seqNo);
}
@Override
public boolean isNew() {
return !persisted;
}
//getters/setters/constructors/...
}

Unfortunately library does not support small, immutable value classes encapsulating all ID values in one object (like JPA does with @IdClass), so you have to live with Object[] array. Defining DAO class is similar to what we've already seen:

public class BoardingPassRepository extends JdbcRepository<BoardingPass, Object[]> {
public BoardingPassRepository() {
this("BOARDING_PASS");
}
public BoardingPassRepository(String tableName) {
super(MAPPER, UNMAPPER, new TableDescription(tableName, null, "flight_no", "seq_no")
);
}
public static final RowMapper<BoardingPass> ROW_MAPPER = //...
public static final RowUnmapper<BoardingPass> UNMAPPER = //...
}

Two things to notice: we extend JdbcRepository<BoardingPass, Object[]> and we provide two ID column names just as expected: "flight_no", "seq_no". We query such DAO by providing both flight_no and seq_no (necessarily in that order) values wrapped by Object[]:

BoardingPass pass = boardingPassRepository.findOne(new Object[] {"FOO-1022", 42});

No doubts, this is cumbersome in practice, so we provide tiny helper method which you can statically import:

import static com.nurkiewicz.jdbcrepository.JdbcRepository.pk;
//...
BoardingPass foundFlight = boardingPassRepository.findOne(pk("FOO-1022", 42));

Check out JdbcRepositoryCompoundPkTest for a working code based on this example.

Transactions

This library is completely orthogonal to transaction management. Every method of each repository requires running transaction and it's up to you to set it up. Typically you would place @Transactional on service layer (calling DAO beans). I don't recommend placing @Transactional over every DAO bean.

Caching

Spring Data JDBC repository library is not providing any caching abstraction or support. However adding @Cacheable layer on top of your DAOs or services using caching abstraction in Spring is quite straightforward. See also: @Cacheable overhead in Spring.

Contributions

..are always welcome. Don't hesitate to submit bug reports and pull requests.

Testing

This library is continuously tested using Travis (Build Status). Test suite consists of 60+ distinct tests each run against 8 different databases: MySQL, PostgreSQL, H2, HSQLDB and Derby + MS SQL Server and Oracle tests not run as part of CI.

When filling bug reports or submitting new features please try including supporting test cases. Each pull request is automatically tested on a separate branch.

Building

After forking the official repository building is as simple as running:

$ mvn install

You'll notice plenty of exceptions during JUnit test execution. This is normal. Some of the tests run against MySQL and PostgreSQL available only on Travis CI server. When these database servers are unavailable, whole test is simply skipped:

Results :
Tests run: 484, Failures: 0, Errors: 0, Skipped: 295

Exception stack traces come from root AbstractIntegrationTest.

Design

Library consists of only a handful of classes, highlighted in the diagram below (source):

UML diagram

JdbcRepository is the most important class that implements all PagingAndSortingRepository methods. Each user repository has to extend this class. Also each such repository must at least implement RowMapper and RowUnmapper (only if you want to modify table data).

SQL generation is delegated to SqlGenerator. PostgreSqlGenerator. and DerbySqlGenerator are provided for databases that don't work with standard generator.

Changelog

0.4.1

0.4

  • Repackaged: com.blogspot.nurkiewicz -> com.nurkiewicz

0.3.2

  • First version available in Maven central repository
  • Upgraded Spring Data Commons 1.6.1 -> 1.8.0

0.3.1

0.3

0.2

0.1

License

This project is released under version 2.0 of the Apache License (same as Spring framework).

posted @ 2015-12-28 23:48 管先飞 阅读(4084) | 评论 (2)编辑 收藏

Idea是目前最好的开发工具,经收集及整理如下常用快捷键: 
一、常用快捷键:
 

     
  1.常用操作:
       Ctrl+E,可以显示最近编辑的文件列表
  Shift+Click可以关闭文件
  Ctrl+[或]可以跳到大括号的开头结尾
  Ctrl+Shift+Backspace可以跳转到上次编辑的地方
  Ctrl+F12,可以显示当前文件的结构
  Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择
  Ctrl+N,可以快速打开类
  Ctrl+Shift+N,可以快速打开文件
  Alt+Q可以看到当前方法的声明
  Ctrl+W可以选择单词继而语句继而行继而函数
  Alt+F1可以将正在编辑的元素在各个面板中定位
  Ctrl+P,可以显示参数信息
  Ctrl+Shift+Insert可以选择剪贴板内容并插入
  Alt+Insert可以生成构造器/Getter/Setter等
  Ctrl+Alt+V 可以引入变量。例如把括号内的SQL赋成一个变量
  Ctrl+Alt+T可以把代码包在一块内,例如try/catch
  Alt+Up and Alt+Down可在方法间快速移动

  2. 查询快捷键
  CTRL+N 查找类
  CTRL+SHIFT+N 查找文件
  CTRL+SHIFT+ALT+N 查找类中的方法或变量
  CIRL+B 找变量的来源
  CTRL+ALT+B 找所有的子类
  CTRL+SHIFT+B 找变量的类
  CTRL+G 定位行
  CTRL+F 在当前窗口查找文本
  CTRL+SHIFT+F 在指定窗口查找文本
  CTRL+R 在 当前窗口替换文本
  CTRL+SHIFT+R 在指定窗口替换文本
  ALT+SHIFT+C 查找修改的文件
  CTRL+E 最近打开的文件
  F3 向下查找关键字出现位置
  SHIFT+F3 向上一个关键字出现位置
  F4 查找变量来源
  CTRL+ALT+F7 选中的字符查找工程出现的地方
  CTRL+SHIFT+O 弹出显示查找内容

  3. 自动代码
  ALT+回车 导入包,自动修正
  CTRL+ALT+L 格式化代码
  CTRL+ALT+I 自动缩进
  CTRL+ALT+O 优化导入的类和包
  ALT+INSERT 生成代码(如GET,SET方法,构造函数等)
  CTRL+E 最近更改的代码
  CTRL+SHIFT+SPACE 自动补全代码
  CTRL+空格 代码提示
  CTRL+ALT+SPACE 类名或接口名提示
  CTRL+P 方法参数提示
  CTRL+J 自动代码
  CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里

  4. 复制快捷方式
  CTRL+D 复制行
  CTRL+X 剪切,删除行
  5. 其他快捷方式
  CIRL+U 大小写切换
  CTRL+Z 倒退
  CTRL+SHIFT+Z 向前
  CTRL+ALT+F12 资源管理器打开文件夹
  ALT+F1 查找文件所在目录位置
  SHIFT+ALT+INSERT 竖编辑模式
  CTRL+/ 注释//
  CTRL+SHIFT+/ 注释/*...*/
  CTRL+W 选中代码,连续按会有其他效果
  CTRL+B 快速打开光标处的类或方法
  ALT+ ←/→ 切换代码视图
  CTRL+ALT ←/→ 返回上次编辑的位置
  ALT+ ↑/↓ 在方法间快速移动定位
  SHIFT+F6 重构-重命名
  CTRL+H 显示类结构图
  CTRL+Q 显示注释文档
  ALT+1 快速打开或隐藏工程面板
  CTRL+SHIFT+UP/DOWN 代码向上/下移动。
  CTRL+UP/DOWN 光标跳转到第一行或最后一行下
  ESC 光标返回编辑框
  SHIFT+ESC 光标返回编辑框,关闭无用的窗口
  F1 帮助千万别按,很卡!
  CTRL+F4 非常重要下班都用

二、常用配置:
  1. IDEA内存优化
  因机器本身的配置而配置:
  \IntelliJ IDEA 8\bin\idea.exe.vmoptions
  -----------------------------------------
  -Xms64m
  -Xmx256m
  -XX:MaxPermSize=92m
  -ea
  -server
  -Dsun.awt.keepWorkingSetOnMinimize=true

posted @ 2015-09-26 11:38 管先飞 阅读(469) | 评论 (0)编辑 收藏

1、编写脚步:update.js
     /**
 * 时间对象的格式化;
 */
Date.prototype.format = function(format) {
    /*
     * eg:format="YYYY-MM-dd hh:mm:ss";
     */
    var o = {
        "M+" :this.getMonth() + 1, // month
        "d+" :this.getDate(), // day
        "h+" :this.getHours(), // hour
        "m+" :this.getMinutes(), // minute
        "s+" :this.getSeconds(), // second
        "q+" :Math.floor((this.getMonth() + 3) / 3), // quarter
        "S" :this.getMilliseconds()
    // millisecond
    }
 
    if (/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (this.getFullYear() + "")
                .substr(4 - RegExp.$1.length));
    }
 
    for ( var k in o) {
        if (new RegExp("(" + k + ")").test(format)) {
            format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k]
                    : ("00" + o[k]).substr(("" + o[k]).length));
        }
    }
    return format;
}
var date =new Date();
var createdate=date.format("yyyy-MM-dd hh:mm:ss");
date.setMinutes(date.getMinutes()+5);
var validtime=date.format("yyyy-MM-dd hh:mm:ss");
db.UserOnlineInfo.update(
{
  "uid" : "110000350"
},
{$set : {
  "uid" : "110000350", 
  "createtime" : createdate,
  "validtime" : validtime
}});
db.UserOnlineInfo.update(
{
  "uid" : "110000351"
},
{$set : {
  "uid" : "110000351", 
  "createtime" : createdate,
  "validtime" : validtime
}});

2、编写shell脚步:
 #/bin/bash
echo "update mongod begin"
cd /home/mongodb/mongodb-3.0.2/bin
./mongo  192.168.1.122:27108/YouLiao update.js;
echo "update mongod success"

3、 执行脚本:
/home/mongodb/mongodb-3.0.2/bin/mongo  192.168.1.122:27108/YouLiao /root/www/job/mongo-test/update.js

备注:
mongodb查询、删除类似

   
posted @ 2015-09-22 19:25 管先飞 阅读(3555) | 评论 (0)编辑 收藏

Java多线程技术  --作者:杨帆    文章连接:http://express.ruanko.com/ruanko-express_6/webpage/tech4.html
 
项目经理:杨帆

多线程编程一直是学员们比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。

进程、线程、并发执行

首先我们先来认识一下进程、线程、并发执行的概念:

  一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进程。启动进程的时候,操作系统会为进程分配资源,其中最主要的资源是内存空间,因为程序是在内存中运行的。

在进程中,有些程序流程块是可以乱序执行的,并且这个代码块可以同时被多次执行。实际上,这样的代码块就是线程体。线程是进程中乱序执行的代码流程。当多个线程同时运行的时候,这样的执行模式成为并发执行。

下面我以一个日常生活中简单的例子来说明进程和线程之间的区别和联系:

双向多车道道路图

这副图是一个双向多车道的道路图,假如我们把整条道路看成是一个“进程”的话,那么图中由白色虚线分隔开来的各个车道就是进程中的各个“线程”了。

  1. 这些线程(车道)共享了进程(道路)的公共资源(土地资源)。
  2. 这些线程(车道)必须依赖于进程(道路),也就是说,线程不能脱离于进程而存在(就像离开了道路,车道也就没有意义了)。
  3. 这些线程(车道)之间可以并发执行(各个车道你走你的,我走我的),也可以互相同步(某些车道在交通灯亮时禁止继续前行或转弯,必须等待其它车道的车辆通行完毕)。
  4. 这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑控制有误(死锁,多个线程同时竞争唯一资源),那么线程将陷入混乱,无序之中。
  5. 这些线程(车道)之间谁先运行是未知的,只有在线程刚好被分配到CPU时间片(交通灯变化)的那一刻才能知道。

JVM与多线程

Java编写的程序都运行在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。

每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行的。JVM找到程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出。

操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段时间(不一定是均分),然后在每个进程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。

Java语言对多线程的支持

Java语言对多线程的支持通过类Thread和接口Runnable来实现。这里就不多说了。这里重点强调两个地方:

// 主线程其它代码段
ThreadClass subThread = new ThreadClass();
subThread.start();
// 主线程其它代码段
subThread.sleep(1000);

有人认为以下的代码在调用start()方法后,肯定是先启动子线程,然后主线程继续执行。在调用sleep()方法后CPU什么都不做,就在那里等待休眠的时间结束。实际上这种理解是错误的。因为:

  1. start()方法的调用后并不是立即执行多线程代码,而是使得该线程变为可运行态(Runnable),什么时候运行是由操作系统决定的。
  2. Thread.sleep()方法调用目的是不让当前线程独自霸占该进程所获取的CPU资源,以留出一定时间给其他线程执行的机会(也就是靠内部自己协调)。

线程的状态切换

前面我们提到,由于线程何时执行是未知的,只有在CPU为线程分配到时间片时,线程才能真正执行。在线程执行的过程中,由可能会因为各种各样的原因而暂停(就像前面所举的例子一样:汽车只有在交通灯变绿的时候才能够通行,而且在行驶的过程中可能会出现塞车,等待其它车辆通行或转弯的状况)。

这样线程就有了“状态”的概念,下面这副图很好的反映了线程在不同情况下的状态变化。

线程在不同情况下的状态变化

  • 新建状态(New):新创建了一个线程对象。
  • 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
  • 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
  • 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
    1. 等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。
    2. 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM把该线程放入锁。
    3. 其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
  • 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

Java中线程的调度API

Java中关于线程调度的API最主要的有下面几个:

  1. 线程睡眠:Thread.sleep(long millis)方法
  2. 线程等待:Object类中的wait()方法
  3. 线程让步:Thread.yield() 方法
  4. 线程加入:join()方法
  5. 线程唤醒:Object类中的notify()方法

关于这几个方法的详细应用,可以参考SUN的API。这里我重点总结一下这几个方法的区别和使用。

sleep方法与wait方法的区别:

  1. sleep方法是静态方法,wait方法是非静态方法。
  2. sleep方法在时间到后会自己“醒来”,但wait不能,必须由其它线程通过notify(All)方法让它“醒来”。
  3. sleep方法通常用在不需要等待资源情况下的阻塞,像等待线程、数据库连接的情况一般用wait。

sleep/wait与yeld方法的区别:调用sleep或wait方法后,线程即进入block状态,而调用yeld方法后,线程进入runnable状态。

wait与join方法的区别:

  1. wait方法体现了线程之间的互斥关系,而join方法体现了线程之间的同步关系。
  2. wait方法必须由其它线程来解锁,而join方法不需要,只要被等待线程执行完毕,当前线程自动变为就绪。
  3. join方法的一个用途就是让子线程在完成业务逻辑执行之前,主线程一直等待直到所有子线程执行完毕。

通过上面的介绍相信同学们对java里面的多线程已经有了基本的了解和认识。其实多线程编程并没有大家想象中的那么难,只要在实际的学习,工作当中不断的加以练习和使用,相信大家很快就能掌握其中的奥妙,从而编写出赏心悦目的java程序。


posted @ 2015-04-11 17:31 管先飞 阅读(263) | 评论 (0)编辑 收藏

1、多表级联删除:
---DELETE---
DELETE from a_msg_push,a_announcement
using a_msg_push,a_announcement
where  a_msg_push.announcement_id=a_announcement.id and a_announcement.Create_time<'2014-11-19 23:59:59';

2、子查询删除:
-----------delete--------
DELETE From  t_repeat  where t_repeat.id in(
SELECT tb.id from (
SELECT *  from t_repeat   t 
where 
1=1
and 
(t.cid,t.uid ) in (select t1.cid,t1.uid from t_repeat t1 group by t1.cid,t1.uid having count(*) > 1) 
and 
t.id  not in (select min(t2.id) from t_repeat t2 group by t2.cid,t2.uid having count(*)>1) 
) as tb )

3、子表删除:
-----------delete--------
DELETE From  t_repeat  where t_repeat.id  not in
   SELECT tb.id from(
select  a.id from t_repeat a where a.id =(
select   max(b.id) from t_repeat b where a.cid=b.cid and a.uid=b.uid
   )as tb
)
posted @ 2015-03-01 22:52 管先飞 阅读(2547) | 评论 (0)编辑 收藏

感谢廖雪峰为大家提供这么好的免费教程,主要目录如下:
Git教程

posted @ 2014-10-20 10:59 管先飞 阅读(231) | 评论 (0)编辑 收藏

gooole浏览器内核已经有webkit内核移步到Bilnk开发属于Chromium Projects 的版本,下面为完整教程。

目录

  1. Blink's Mission:
  2. Participating
    1. 2.1 Discussions
    2. 2.2 Watching for new features
    3. 2.3 Committing and reviewing code
    4. 2.4 Developing Blink
    5. 2.5 How do I port Blink to my platform?
  3. Web Platform Changes: Guidelines
    1. 3.1 Scope
    2. 3.2 Policy for shipping and removing web platform API features
    3. 3.3 Trivial Changes
    4. 3.4 Vendor Prefixes
  4. Web Platform Changes: Process
    1. 4.1 Launch Process: New Features
    2. 4.2 Launch Process: Deprecation
    3. 4.3 API Owners
    4. 4.4 API Review
    5. 4.5 Feature Dashboard
    6. 4.6 Guiding Principles for Process
  5. Testing
  6. Architectural Changes
  7. Developer FAQ
  8. Subpage Listing
    友情连接:
    https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html
posted @ 2014-10-19 21:09 管先飞 阅读(330) | 评论 (0)编辑 收藏

如下两条常用sql,统计分类数据,你能说出区别吗?
一、常用sql一:
select 
r.cid,
r.depart_id,
r.employ_id,
r.create_by,
count(DISTINCT r.form_type) as dailyReportNum
FROM 
report r
where 
1=1 
GROUP BY 
r.employ_id

二、常用sql二:
select 
r.cid,
r.depart_id,
r.employ_id,
r.create_by,
sum(case WHEN df.form_type=1 then 1 else 0 end ) as dailyReportNum
FROM 
report r
where 
1=1 
GROUP BY 
r.employ_id


posted @ 2014-09-18 17:05 管先飞 阅读(3581) | 评论 (4)编辑 收藏

HSSF和XSSF的区别:
http://poi.apache.org/spreadsheet/index.html
POI官方详情教程:
http://poi.apache.org/spreadsheet/quick-guide.html

Index of Features

posted @ 2014-09-18 12:24 管先飞 阅读(3808) | 评论 (2)编辑 收藏

现阶段JAVA操作Excel的JAR主要有apache 的POI及jxl.Jxl方便快捷,POI用于对复杂Excel的操作。

Jxl官网:http://www.andykhan.com/jexcelapi/index.html


一、Jxl的API

Jxl的API主要有三个包,jxl,jxl.format,jxl.write。如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离此API吧。

一个excel文件由一个工作簿组成,一个工作簿又由n个工作表组成,每个工作表又由多个单元格组成。对应于Jxl中的结构为

读文件(包jxl)

写文件(包jxl.write)

说明

Workbook 

WritableWorkbook

工作簿

Sheet

WritableSheet

工作表

Cell/Image/Hyperlink

WritableCell/WritableImage//WritableHyperlink

单元格/图像/超链接

       单元格(此处指文本单元格,图像及链接和单元格做为一个层次)分为好多种,所以在API的设计中将Cell作为一个接口而存在。 对应的jxl中的结构为:

读文件(包jxl)

写文件(包jxl.write)

说明

Cell

WritableCell

单元格

BooleanCell

Boolean

布尔值单元格

DateCell

DateTime

时间单元格

ErrorCell

 

形式错误的单元格

LabelCell

Label

文本单元格

NumberCell

Number

数字单元格

FormualCedll

Formual

公式单元格

 

Blank

空格单元格

BooleanFormualCell

 

布尔公式单元格

DateFormualCell

 

时间公式单元格

ErrorFormualCell

 

错误公式单元格

StringFormualCell

 

文本公式单元格

NumberFormualCell

 

数字公式单元格

 

而有的时候,我们可能将几个单元格作为一个整体来处理,在API中对应的则是:

    jxl.Range 

 

    虽然数据是电子表格的核心,但是同时其也需要一些辅助类,比如文件格式设置,工作表设置与显示效果,单元格设置与显示效果等。按照其层次,则依次有以下接口或类。

读文件(包jxl)

写文件(包jxl.write)

说明

WorkbookSettings

WorkbookSettings(包jxl)

设置workbook属性的bean

SheetSettings

SheetSettings(包jxl)

设置具体sheet的属性的bean(比如表头表底等)

HeaderFooter

HeaderFooter(包jxl)

表示表头表底类

HeaderFooter.Contents

HeaderFooter.Contents(包jxl)

具体表头表底设置

CellFeatures

WritableCellFeautres

表格内容相关设置(验证)

CellReferenceHelper

 

得到引用单元格相关属性

CellType

 

表格相关类型

CellView

CellView(包jxl)

表格视图相关设置

CellFormat

WritableCellFormat

表格显示样式设置

 

BoldStyle

边框枚举

 

DateFormat

时间格式

 

DateFormats

时间格式枚举

 

NumbreFormat

数据格式

 

NumbreFormats

数字模式枚举

 

WritableFont

字体设置

 

WriteableFont.Fontname

静态字体内部类

 

最后,关于Jxl.format包,此包主要是一些与具体样式有关的接口和枚举,不进行具体描述。
文章摘自:http://blog.csdn.net/surgent/article/details/5836580

posted @ 2014-09-18 09:21 管先飞 阅读(1993) | 评论 (0)编辑 收藏

 网络盒子目前市面上主流的有小米盒子、乐视盒子、Uhost、天猫盒子,各种盒子的功能都差不多,现以小米盒子为列简单描述一下小米盒子。
一、小米盒子的最新功能:
1、观看各种大片电影、电视剧。
2、各种手游、教育培训。
二、小米盒子的缺陷:
1、用户直观搜索相关的视频太困难,搜索功能太局限。
2、网络电视不支持,不过现在可以安装其他视频软件来观看网络电视。
3、对手机端的安卓apk支持不好。
三、小米盒子的潜力:
1、小米盒子的操作系统采用andriod操作系统,以后可以包含手机上有的一切功能。
2、以后在游戏、教育、影院、购物比手机更有发展潜力。
四、小米盒子的使用技巧:
1、小米盒子最新miniui已经支持root,所以可以安装一切安卓应用(安装方法类似手机)。
2、小米盒子系统更新保持网络畅通。
4、可以将手机片源用电视播放,也可用手机玩游戏。
简单写几个小文字睡觉,希望帮电视盒子打打广告,以后希望盒子发展得更好,丰富用户余业观看在客厅的娱乐体验。
posted @ 2014-06-15 01:34 管先飞 阅读(1992) | 评论 (10)编辑 收藏

     摘要: package org.jeecgframework.core.util.excel;import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;import java.lang.reflect.Field;import...  阅读全文
posted @ 2014-05-29 11:14 管先飞 阅读(7842) | 评论 (0)编辑 收藏

JSON转换的四种各种情况:

1. //把java 对象列表转换为json对象数组,并转为字符串

    JSONArray array = JSONArray.fromObject(userlist);
    String jsonstr = array.toString();

2.//把java对象转换成json对象,并转化为字符串

  JSONObject object = JSONObject.fromObject(invite);
   String str=object.toString());

3.//把JSON字符串转换为JAVA 对象数组

  String personstr = getRequest().getParameter("persons");
  JSONArray json = JSONArray.fromObject(personstr);
  List<InvoidPerson> persons = (List<InvoidPerson>)JSONArray.toCollection(json, nvoidPerson.class);
4.//把JSON字符串转换为JAVA 对象

  JSONObject jsonobject = JSONObject.fromObject(str);
  PassportLendsEntity passportlends = null;
  try {
   //获取一个json数组
   JSONArray array = jsonobject.getJSONArray("passports");
   //将json数组 转换成 List<PassPortForLendsEntity>泛型
   List<PassPortForLendsEntity> list = new ArrayList<PassPortForLendsEntity>();
   for (int i = 0; i < array.size(); i++) {   
            JSONObject object = (JSONObject)array.get(i);  
            PassPortForLendsEntity passport = (PassPortForLendsEntity)JSONObject.toBean(object,
              PassPortForLendsEntity.class);
            if(passport != null){
             list.add(passport);
            }  
     }
   //转换PassportLendsEntity 实体类
  passportlends = (PassportLendsEntity)JSONObject.toBean(jsonobject, PassportLendsEntity.class);

  str = "{\"lendperson\":\"李四\",\"lendcompany\":\"有限公司\",\"checkperson\":\"李四\",

  \"lenddate\":\"2010-07-19T00:00:00\",\"lendcounts\":4,\"
  passports\":[{\"passportid\":\"d\",\"name\":\"李豫川\",\"passporttype\":\"K\"},
  {\"passportid\":\"K9051\",\"name\":\"李平\",\"passporttype\":\"K\"},
  {\"passportid\":\"K90517\",\"name\":\"袁寒梅\",\"passporttype\":\"K\"},
  {\"passportid\":\"K905199\",\"name\":\"贺明\",\"passporttype\":\"K\"}]}";
相关的jar包:

posted @ 2014-04-16 01:11 管先飞 阅读(2740) | 评论 (0)编辑 收藏


CriteriaQuery cq = new CriteriaQuery(MsgRecordEntity.class, datagrid);
cq.add(Restrictions.eq("cid", cid));
Criterion c1=cq.and(Restrictions.eq("sendEid", sendEid),Restrictions.eq("pointEid", pointEid)) ;
Criterion c2=cq.and(Restrictions.eq("sendEid",pointEid ),Restrictions.eq("pointEid", sendEid)) ;
cq.or(c1, c2);
cq.add(Restrictions.eq("flag",AilkConstant.FLAG_NOT_REMOVED));
cq.addOrder("sendDate", SortDirection.desc);
cq.add();
posted @ 2014-04-14 10:42 管先飞 阅读(2192) | 评论 (0)编辑 收藏

1、修改内联表
update a_locationservice al,t_kxt_executor_info t 
set al.objid= t.id
where al.location_id=t.end_location_id
and  al.objtype='8' and al.objid is null
2、修改级联表:
update t_kxt_executor_info_detail tid
LEFT JOIN 
   t_kxt_common_reports crep  
on 
 crep.id=tid.obj_id
set tid.flag='2'
where  (tid.obj_type='terminalPhotograph' or tid.obj_type='requestInfo' or tid.obj_type='terminalInfo')  and  crep.id is null
posted @ 2014-02-26 11:09 管先飞 阅读(236) | 评论 (0)编辑 收藏

     摘要: 关于Tomcat: 安装Tomcat:sudo apt-get install tomcat7 配置tomcat:http://wiki.ubuntu.org.cn/Tomcat 启动tomcat:my-instance/bin/startup.sh关闭tomcat:my-instance/bin/shutdown.sh关于系统进程:ps ax   显示当前...  阅读全文
posted @ 2014-02-25 10:17 管先飞 阅读(480) | 评论 (0)编辑 收藏

1.UNIX很简单。但需要有一定天赋的人才能理解这种简单。——Dennis Ritchie
2.软件在能够复用前必须先能用。——Ralph Johnson
3.优秀的判断力来自经验,但经验来自于错误的判断。——Fred Brooks
4.‘理论’是你知道是这样,但它却不好用。‘实践’是它很好用,但你不知道是为什么。程序员将理论和实践结合到一起:既不好用,也不知道是为什么。——佚名
5.当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。——Steve McConnell 《代码大全》
6.如果建筑工人盖房子的方式跟程序员写程序一样,那第一只飞来的啄木鸟就将毁掉人类文明。——Gerald Weinberg
7.项目开发的六个阶段:1. 充满热情 2. 醒悟 3. 痛苦 4. 找出罪魁祸首 5. 惩罚无辜 6. 褒奖闲人——佚名
8.优秀的代码是它自己最好的文档。当你考虑要添加一个注释时,问问自己,“如何能改进这段代码,以让它不需要注释?”——Steve McConnell 《代码大全》
9.我们这个世界的一个问题是,蠢人信誓旦旦,智人满腹狐疑。——Bertrand Russell
10.无论在排练中演示是如何的顺利(高效),当面对真正的现场观众时,出现错误的可能性跟在场观看的人数成正比。——佚名
11.罗马帝国崩溃的一个主要原因是,没有0,他们没有有效的方法表示他们的C程序成功的终止。——Robert Firth
12.C程序员永远不会灭亡。他们只是cast成了void。——佚名
13.如果debugging是一种消灭bug的过程,那编程就一定是把bug放进去的过程。——Edsger Dijkstra
14.你要么要软件质量,要么要指针算法;两者不可兼得。——(Bertrand Meyer)
15.有两种方法能写出没有错误的程序;但只有第三种好用。——Alan J. Perlis
16.用代码行数来测评软件开发进度,就相对于用重量来计算飞机建造进度。——比尔·盖茨
17.最初的90%的代码用去了最初90%的开发时间。余下的10%的代码用掉另外90%的开发时间。——Tom Cargill
18.程序员和上帝打赌要开发出更大更好——傻瓜都会用的软件。而上帝却总能创造出更大更傻的傻瓜。所以,上帝总能赢。——Anon

转自:http://www.zhishihai.net/diannaowangluo/biancheng/bianchengsixiang/145.html
posted @ 2013-11-10 18:54 管先飞 阅读(262) | 评论 (0)编辑 收藏

package com.exl.test;
import java.awt.Color;
import java.io.File;
import jxl.CellView;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import com.exl.utils.ColourUtil;
public class Test {
   public static void main(String[] args) throws Exception {
  String title="报表测试";
  String[] navTitle= {"第一行","第二行","第三行","第四行","第五行","第六行","第七行","第八行"};  
  String[][] content={
  {"1","2","第naionfdapfn三行","第四niaodnfoanfdas行","第noandfoasnjdf五行","第六sdfadsafas行","第afdadfasdfs七a行","第adfasfdasf八行"},
  {"2","2","第三行","第四行","第五行","第六行","第七行","sssssssssss第八sss行"},
  {"3","2","第三行","第四行","第五行","第六行","第七行","第八行sssssssssssss"},
  {"4","2","第三行","第四行","第sssssssssssssss五行","第ssssssssssssssssssss六行","第七行","第八行sssssssss"},
  {"5","2","第三行","第ddddddddddddddddddddddddddddddddddddddddddddddddddddddddd四行","第五行","第六行","第七行","第八行"},
  {"6","2","第三行","第四行","第五行","第六行","第七行","第八行"},
  {"7","2","第三行","第四ddddddddddddddddddddddddddddddd行","第五行","第六行","第七行","第八行"},
  {"8","2","第三行","第四行","第五行","第六行","第七行","第八行"},
  {"9","2","第三行","第ddddddddddddddddddddddddddddddd四行","第五行","第六行","第七行","第八行"},
  {"10","2","第三行","第四行","第五行","第六行","第七行","第八行"},
  {"11","2","第三行","第四行","第五行","第六dddddddddddddd行","第七行","第八行"},
  {"12","2","第三行","第四行","第五行","第六行","第七行","第八行"},
  {"13","2","第三行","第四行","第五行","dddddddddddddddddddddd第六行","第七行","第八行"},
  {"14","2","第三行","第四行","第五行","第dddddddddddddddddddddd六行","第七行","第八行"},
  };  
  String filePath="D:\\DesignSource\\tempT";
  String fileName="NewProject.xls";
  File dir=new  File(filePath);
  if(!dir.isDirectory()){
  dir.mkdirs();
  }
  
       File file = new File(filePath+"\\"+fileName);
       WritableWorkbook workbook = Workbook.createWorkbook(file);  
       WritableSheet sheet = workbook.createSheet("报表统计", 0);  //单元格
       /**
        * title
        */
       Label lab = null;  
       WritableFont   wf2   =   new   WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色
       WritableCellFormat wcfTitle = new WritableCellFormat(wf2);
       wcfTitle.setBackground(jxl.format.Colour.IVORY);  //象牙白
       wcfTitle.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //BorderLineStyle边框
       //       wcfTitle.setVerticalAlignment(VerticalAlignment.CENTRE); //设置垂直对齐
       wcfTitle.setAlignment(Alignment.CENTRE); //设置垂直对齐
       
       CellView navCellView = new CellView();  
       navCellView.setAutosize(true); //设置自动大小
       navCellView.setSize(18);
       
       lab = new Label(0,0,title,wcfTitle); //Label(col,row,str);   
       sheet.mergeCells(0,0,navTitle.length-1,0);
       sheet.setColumnView(0, navCellView); //设置col显示样式
       sheet.setRowView(0, 1600, false); //设置行高
       sheet.addCell(lab);  
       /**
        * status
        */
       
       
       /**
        * nav
        */
       jxl.write.WritableFont wfcNav =new jxl.write.WritableFont(WritableFont.ARIAL,12, WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
        WritableCellFormat wcfN=new WritableCellFormat(wfcNav);
        
        Color color = Color.decode("#0099cc"); // 自定义的颜色
workbook.setColourRGB(Colour.ORANGE, color.getRed(),color.getGreen(), color.getBlue());
       wcfN.setBackground(Colour.ORANGE);
       wcfN.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //BorderLineStyle边框
       wcfN.setAlignment(Alignment.CENTRE); //设置水平对齐
       wcfN.setWrap(false); //设置自动换行
       for(int i=0;i<navTitle.length;i++){
      lab = new Label(i,1,navTitle[i],wcfN); //Label(col,row,str);   
      sheet.addCell(lab);  
      sheet.setColumnView(i, new String(navTitle[i]).length());  
       }
       
       /**
        * 内容
        */
       jxl.write.WritableFont wfcontent =new jxl.write.WritableFont(WritableFont.ARIAL,12, WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);
       WritableCellFormat wcfcontent = new WritableCellFormat(wfcontent);
       wcfcontent.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //BorderLineStyle边框
       wcfcontent.setAlignment(Alignment.CENTRE);
       CellView cellView = new CellView();  
       cellView.setAutosize(true); //设置自动大小
       for(int i=0;i<content.length;i++){  
           for(int j=0;j<content[i].length;j++){  
          sheet.setColumnView(i, cellView);//根据内容自动设置列宽  
          lab = new Label(j,i+2,content[i][j],wcfcontent); //Label(col,row,str);  
               sheet.addCell(lab);  
//               sheet.setColumnView(j, new String(content[i][j]).length());  
           }  
       }  
       
       workbook.write();  
       workbook.close();  
}
}
posted @ 2013-10-17 01:18 管先飞 阅读(40034) | 评论 (1)编辑 收藏

1、请求下载地址:
try {
//执行检索
cmsSupSubmitSiteStatBeanList = cmsSupSubmitSiteInfoMngService.govStat(condition);
//根据条件查找
cmsSupSubmitSiteInfoMngBeanList = cmsSupSubmitSiteInfoMngService.findByConditionStat(condition);
//临时文件位置
String path=this.getServletConfig().getServletContext().getRealPath("\\upload\\temp");
File ftemp=new File(path);
if (!ftemp.exists()) {
ftemp.mkdirs();//不存在则创建
}
//生成临时文件名
String saveFilename = DateUtil.formatNowDateTime("yyyyMMddHHmmssSSS")+getNewName()+ ".csv";
WritableWorkbook book = Workbook.createWorkbook(new File(path + "\\"+saveFilename));// 创建excel文件
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("网站信息统计表", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//标题
String[] title1 = {"单位名称"
,"1月"
,"2月"
,"3月"
,"4月"
,"5月"
,"6月"
,"7月"
,"8月"
,"9月"
,"10月"
,"11月"
,"12月"
,"总报送量"
,"报送率"
,"分数"
,"加减分"
,"总分数"
};
//表头
for(int i=0;i<title1.length;i++){
//第n列第一行标识表头
Label label = new Label(i, 0, title1[i]);
sheet.addCell(label); //将定义好的单元格添加到工作表中 
}
//内容
for (int i = 0; i < cmsSupSubmitSiteStatBeanList.size(); i++) {
CmsSupSubmitSiteStatBean bean = cmsSupSubmitSiteStatBeanList.get(i);
//内容
String[] rs1 = {  bean.getDeptName()
,String.valueOf(bean.getUsed01()) + "/" + String.valueOf(bean.getSup01())
,String.valueOf(bean.getUsed02()) + "/" + String.valueOf(bean.getSup02())
,String.valueOf(bean.getUsed03()) + "/" + String.valueOf(bean.getSup03())
,String.valueOf(bean.getUsed04()) + "/" + String.valueOf(bean.getSup04())
,String.valueOf(bean.getUsed05()) + "/" + String.valueOf(bean.getSup05())
,String.valueOf(bean.getUsed06()) + "/" + String.valueOf(bean.getSup06())
,String.valueOf(bean.getUsed07()) + "/" + String.valueOf(bean.getSup07())
,String.valueOf(bean.getUsed08()) + "/" + String.valueOf(bean.getSup08())
,String.valueOf(bean.getUsed09()) + "/" + String.valueOf(bean.getSup09())
,String.valueOf(bean.getUsed10()) + "/" + String.valueOf(bean.getSup10())
,String.valueOf(bean.getUsed11()) + "/" + String.valueOf(bean.getSup11())
,String.valueOf(bean.getUsed12()) + "/" + String.valueOf(bean.getSup12())
,String.valueOf(bean.getTolUsed()) + "/" + String.valueOf(bean.getTolSup())
,String.valueOf(bean.getUsedRate()) + "%"
,String.valueOf(bean.getPoint())
,String.valueOf(bean.getPmPoint())
,String.valueOf(bean.getTolPoint())
};
//内容从第二行开始打印
for (int j = 0; j < rs1.length; j++) {
Label label = new Label(j, i+1, rs1[j]);
 sheet.addCell(label);
}
}
// 打印详细========================================================================================
String[] stDtl = {  "单位名称"
,"标题"
,"加减分"
,"报送时间"
};
WritableSheet sheet2 = book.createSheet("网站信息采用标题", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//标题
//表头
for(int i=0;i<stDtl.length;i++){
//第n列第一行标识表头
Label labe2 = new Label(i, 0, stDtl[i]);
sheet2.addCell(labe2);
}
//内容
String titleVar="";
int flagNum=0;
for( int i = 0; i < cmsSupSubmitSiteInfoMngBeanList.size(); i ++ ){
CmsSupSubmitSiteInfoMngBean bean = cmsSupSubmitSiteInfoMngBeanList.get(i);
String[] rs2 = {bean.getSpDeptName()
,bean.getSupTitle()
,String.valueOf(bean.getMsgPmPoint())
,bean.getAddDate()
};
if(!titleVar.equals(rs2[0])){
for (int x =0; x < rs2.length; x++) {
Label labeVar2 = new Label(x, i+1, rs2[x]);
sheet2.addCell(labeVar2);
}
   }else{
    //内容从第二行开始打印
       //sheet.mergeCells(int col1,int row1,int col2,int row2);//左上角到右下角    
        sheet.mergeCells(0,1, 0,flagNum);//左上角到右下角     ,列,行,列,行
for (int j =1; j < rs2.length; j++) {
Label labe2 = new Label(j, i+1, rs2[j]);
sheet2.addCell(labe2);
}
   }
flagNum++;
titleVar=rs2[0];
}
// // 将定义好的单元格添加到工作表中
// /*
// * 生成一个保存数字的单元格 必须使用Number的完整包路径,否则有语法歧义 单元格位置是第二列,第一行,
// 值为789.123
// */
// // jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 );
// // sheet.addCell(number);
// 写入数据并关闭文件
book.write();
book.close();
// 将生成的文件下载
AttUploadsServlet servlet=new AttUploadsServlet();
servlet.downLoadFile(req, resp, "网站信息统计.csv", path + "\\" + saveFilename);
} catch (Exception e) {
System.out.println(e);
}

2、下载附件:
/**
* 文档下载
* @param request 
* @param response
* @param fileName 文件名
* @param attachment -文件路径
* @return
*/
public boolean downLoadFile(HttpServletRequest request,HttpServletResponse response
,String fileName,String attachment) {
try
{
String filepath =attachment;
File file = new File(filepath);
if(!file.exists())
{
return false;
//throw new Exception(filepath+"文件未找到!");
}
BufferedInputStream br = new BufferedInputStream(new FileInputStream(file));
byte[] buf = new byte[1024];
int len = 0;
response.reset();                                            //非常重要
//纯下载方式
response.setContentType("application/x-msdownload"); 
response.setHeader("Content-Disposition", "attachment; filename=" 
+ (new String(fileName.getBytes("gb2312"),"ISO-8859-1"))); 
OutputStream out = response.getOutputStream();
while((len = br.read(buf)) >0)
out.write(buf,0,len);
out.flush();
br.close();
return true;
}
catch(Exception ex)
{
log.info(ex.getMessage());
return false;
}
}

多学一点:划服务器下载附件
<%@page import="java.io.FileInputStream"%>
<%@page import="java.io.*"%>
<%@page import="java.io.File"%>
<%@page import="java.io.OutputStream"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.net.URL"%>
<%@page import="java.net.URLConnection"%>
<!-- 以上这行设定本网页为Word格式的网页 -->  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<%
   String refFilePath= request.getRealPath(new String(request.getParameter("fileSrc").getBytes("ISO-8859-1"),"UTF-8"));
   //String docName = new String(request.getParameter("fileName").getBytes("ISO-8859-1"),"UTF-8");
  request.setCharacterEncoding("UTF-8");
  String docName = request.getParameter("fileName");
  try{
        /* 创建输入流 */  
         InputStream is = this.getClass().getClassLoader().getResourceAsStream("project.properties"); 
        Properties p = new Properties();
      try {
     p.load(is);       //Properties 对象已生成,包括文件中的数据
      }catch(IOException e){
       e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
      }
      
      String refFp=p.getProperty("xzql.refFilePath");
        URL ul=new URL(refFp+new String(request.getParameter("fileSrc").getBytes("ISO-8859-1"),"UTF-8"));
        URLConnection conn=ul.openConnection();
        InputStream inStream = conn.getInputStream();
        String disName = java.net.URLEncoder.encode(docName, "UTF-8");  
        response.reset();  
        response.setContentType("application/x-msdownload");  
        response.addHeader("Content-Disposition",  
                "attachment; filename=\"" + disName + "\"");  
         
        
        byte[] buf = new byte[4096];  
        /* 创建输出流 */  
        ServletOutputStream servletOS = response.getOutputStream();  
        int readLength;
        int alllength=0;
        while (((readLength = inStream.read(buf)) != -1)) {  
            servletOS.write(buf, 0, readLength); 
            alllength+= readLength;
        }
        response.setContentLength(alllength); 
        inStream.close();  
        servletOS.flush();  
        servletOS.close();  
   }catch(Exception e){
  out.print("文件不存在! ");
  e.printStackTrace();
  %> 
  </html>

2).struts2下载Excel:
http://blog.csdn.net/weinianjie1/article/details/5941042





posted @ 2013-10-14 01:46 管先飞 阅读(599) | 评论 (0)编辑 收藏

myeclipse中的字体看上去比较舒服,但是忽然使用eclipse找不到该字体。具体介绍及解决办法如下:
myeclipse用Courier New这个字体,但是这个字体在Eclipse中默认是选不出来的。到Eclipse preference--->colors and fonts中 找到选择字体的地方(选择字体的下拉菜单中是找不到Courier New的),在左下方有一行蓝色的字“显示更多字体”,点击后会出现一个新的界面,这里会显示你机器上所有的字体。找到Courier New后点击右键选择[显示],然后关闭这个界面。回到更改字体的界面后你会发现下拉菜单中已经可以选择Courier New搜索这个字体了。然后将该字体默认即可!
posted @ 2013-09-15 23:51 管先飞 阅读(3218) | 评论 (0)编辑 收藏

mysql代码:
select sp.singer_name as singerName,sp.fans_value as fansValue

From singer_publish sp 
where 1=1   
order by  (case  when  (sp.fans_value is null or sp.fans_value='' or sp.fans_value<1) then 1 else 0 end ),sp.fans_value; 
posted @ 2013-09-10 15:11 管先飞 阅读(872) | 评论 (0)编辑 收藏

 /*
* 智能机浏览器版本信息:
*/
  var browser={
    versions:function(){
           var u = navigator.userAgent, app = navigator.appVersion;
           return {//移动终端浏览器版本信息
                trident: u.indexOf('Trident') > -1, //IE内核
                presto: u.indexOf('Presto') > -1, //opera内核
                webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
                gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
                mobile: !!u.match(/AppleWebKit.*Mobile.*/)||!!u.match(/AppleWebKit/), //是否为移动终端
                ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
                android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
                iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
                iPad: u.indexOf('iPad') > -1, //是否iPad
                webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
            };
         }(),
         language:(navigator.browserLanguage || navigator.language).toLowerCase()
if(browser.versions.iPhone || browser.versions.iPad)
{
}
else
{
 
}
posted @ 2013-09-10 15:10 管先飞 阅读(269) | 评论 (0)编辑 收藏

人们常说程序员的生活枯燥为人刻板,其实这是你不懂程序员,代码之外,这些高智商的人幽默有趣,论坛常常是他们展现才华的地方,BLOG是他们分享技术的地方,BBS等地方有问题他门总是热心帮助解答,处理程序异常,修改程序错误等。

  程序员也是很懂得品味人生的,因为工作影响他门也许会对生活感慨,伤感自己没足够或是更多的时间去做工作之外的别的事。陪朋友,亲戚,家人、甚至陪女朋友去买套漂亮的衣服的时间都没有等。但是我个人意见认为,程序员是最诚实、最实用主义及最爱恨分明的,平日工作虽然单调但不乏味。

  程序员是最诚实从何谈起?

  程序员在学习和工作期间几乎天天和机器打交道,压根就没有受欺负或是欺负别人的机会,勤奋的程序员在调试无穷多的程序BUG时,已经深深地接受了“诚实”的教育,不诚实的人,他肯定不想做、也做不好程序员。

  为何说程序员是最实用主义?

  在10年前我第一次听说电脑,后来初中文化课程中也开设了叫《计算机信息技术》这么一门课程,当时老师不停的在讲台上给我们讲计算机是如何的厉害,但他在我门心里一直只是个神话传说,上一年的计算机课还没曾见过真正的计算机的庐山真面目,只是从老师的口中听说过他是如何的神。从我听说计算机到后来我学习计算机甚至是现在我从事的计算机的工作,已经过去了10个春夏秋冬了,但是目前最先进的计算机也不具备智能,他其实是笨的他也需要人员去操作,当我成为程序员的那刻我意识到计算机的神话是众多程序员的汗水堆积起来的。

       程序员的工作就是把复杂的问题转化为计算机能处理的简单的程序。如果一个问题复杂到连程序员自己都不能理解,他就无法编写程序让更笨的计算机来处理,所以程序信奉“简单----实用”主义。

  程序员如何的爱恨分明?

  程序员大都喜欢技术挑战,不喜欢搞测试与维护。高水平的程序员喜欢和高水平的程序员一起工作,我也是这样的一个人,我怕“与臭棋佬下棋,棋越下越臭”。

  也许是因为工作影响,休闲太少吧,程序员大都不喜欢拉帮结派、耍政治手腕。不信,你数数你认识的程序员,有几个人党派人士?又有几个是政府官员?说到这里我想到了穷人,因为我也是穷人之一。穷人为什么总是穷,很难变为富裕的人呢?因为穷人怕,怕付出没回报,怕投资得不到利益。怕高官怕大人物以至于不赶去和异类人群接触,始终活动在穷人堆里,又怎么会变得富裕呢?出非出现奇迹,麻雀巢里飞出个金凤凰。呵呵,说远了。

  何解工作单调却不乏味?

  程序设计的真正含义是什么?

  要塑造一个程序员又需要多少时间和经历呢?又有那些过程呢?学习过程的天空是黑暗的,记得以前在大学的时候,每天起床后的第一件事就是打开电脑,然后洗溯吃饭,接着就是看书写代码这些,饿了又去吃饭然后又面对电脑,当困了的时候就倒下睡觉。醒了又爬起来,很少和朋友家人联系,每天都过着这样的单调的循环生活,但很遗憾的是我和电脑这么的亲密接触到现在还是不能达到人机合一的境界。

  我记得我曾经说过,我最好的朋友是我的电脑,无论我是高兴还是烦恼,无论我是兴奋还是疲倦,一直陪伴着我的始终是他。但这句话是针对不同的时间到,如果参加工作了,或许工作中的任务、同事之间的友谊、个人生活中的感情等等都将会成为我们的最爱。总的来说是因事而异、因人而异。

  饿了就吃,困了就睡,只要时机恰当就进行程序设计。生活、学习及工作融为一体,尽管单调却不乏味,还能独享孤独。

     原文连接:http://blog.sina.com.cn/s/blog_883c46a60101a8ez.html

posted @ 2013-05-19 23:35 管先飞 阅读(257) | 评论 (0)编辑 收藏

1、程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档。

2、程序猿的读书历程:x 语言入门 —> x 语言应用实践 —> x 语言高阶编程 —> x 语言的科学与艺术 —> 编程之美 —> 编程之道 —> 编程之禅—> 颈椎病康复指南。

3、还没上大学的时候,高三暑假,跑到家那边的图书城想买传说中的C++的书,然后看到一本C#,我一看,嘿,这个++还写得挺艺术的,重叠起来了,于是把C#买了回来……

4、问:程序猿最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)

5、有一天,程序猿们突然发现他们要涨的工资掉到井里啦!大家都很害怕,连忙一个吊着一个,从树上伸到井里去捞工资。正好他们摸到工资的时候,一个老程序员忽然兴奋的大叫:别蠢了,要涨的工资还好好的挂在天上呢!

6、诸葛亮是一个优秀的程序猿,每一个锦囊都是应对不同的case而编写的!但是优秀的程序猿也敌不过更优秀的bug!六出祈山,七进中原,鞠躬尽瘁,死而后已的诸葛亮只因为有一个错误的case-马谡,整个结构就被break了!

7、生活中程序猿的真实写照、一款游戏一包烟,一台电脑一下午。一盒泡面一壶水,一顿能管一整天。

8、程序猿要了3个孩子,分别取名叫Ctrl、Alt 和Delete,如果他们不听话,程序猿就只要同时敲他们一下就会好的…

9、宪法顶个球!中国的法律都是.txt文件,不是.exe文件。 

10、同事说,他在写i++的时候总觉的自己写的是 我艹.........有木有同感???? 

11、程序员,年二十有二,始从文,连考而不中。 遂习武,练武场上发一矢,中鼓吏,逐之出。 改学IT,自撰一函数,用之,堆栈溢出。 

12、《桃花庵--程序员版》写字楼里写字间,写字间中程序员; 程序人员写程序,又将程序换酒钱; 酒醒只在屏前坐,酒醉还来屏下眠; 酒醉酒醒日复日,屏前屏下年复年; 但愿老死电脑间,不愿鞠躬老板前; 奔驰宝马贵者趣,公交自行程序员; 别人笑我太疯癫,我笑自己命太贱; 但见满街漂亮妹,哪个归得程序员; 

13、有一天某程序员去买肉,要了一公斤, 拿到公平电子秤上一称:"额。。怎么少了24克。。"

14、检验代码质量的唯一标准 = 代码review时骂的次数 / 代码review时间 。 

15、杀一个程序员不需要用枪,改三次需求就可以了。

16、C++程序员看不起C 程序员, C 程序员看不起java程序员, java程序员看不起C#程序员,C#程序员看不起美工。周末了,美工带着妹子出去约会了,一群SX程序员还在加班。。。 

17、问:如何生成一个随机的字符串?答:让新手退出VIM 。

18、“我给你出个脑筋急转弯,你说达芬奇密码的上面是什么?” “这。。太难了吧。。不知道。。。” “笨!达芬奇密码的上面就是达芬奇帐号啊,那达芬奇密码的下面是什么?”“我。。。这。。。还是不知道。。。”“是达芬奇验证码”。 

19、随机函数可以帮你实现家庭和谐: Talk(){:top word(1)="恩!"; word(2)="好的!";word(3)="然后呢?";word(4)="有道理";i=random(4); say word(i) goto top;} 

20、程序员爱情观:爱情就是死循环,一旦执行就陷进去了;爱上一个人,就是内存泄漏--你永远释放不了;真正爱上一个人的时候,那就是常量限定,永远不会改变;女朋友就是私有变量,只有我这个类才能调用;情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。 

21、女同学们纷纷表示,这年头不找个程序员老公,还真是连节日低价购物权都没了。

22、Delphi象吉普车,什么路上都能开,却在啥路上也开不好;PB就象卡丁车,只能在固定线路上开,到室外就有些不稳;VC象跑车,你开得起却买不起,而且一旦发生故障,想修都找不到毛病在哪;Java象敞棚车,不管刮风下雨还是艳阳高照,都能照开不误;VB就是摩托车,骑的时间越长,你越痛恨它! 

23、上联MYSQL明月三千里 下联: XHTML.信号他妈烂! 

24、程序员的四大理想:南极有套房,澳大利亚有群羊,全世界电脑死光光,孩儿有个娘。 

25、有一种崩溃叫密码输入有误;有一种惊慌叫做账号异地登陆;有一种感情叫隐身对其可见;有一种误会叫人机离线;有一种失落叫没有访问权限;有一种感情叫站点访问失败;有一种无奈叫bug无法复现。。。

26、黑体的锯齿,宋体的沧桑,崩溃的避头尾集。美工永远纠结于网站程序员的粗犷,就像MAC永远不懂PC的忧伤。。。。

27、程序猿追求MM不成,含泪追问:我在你眼里算什么?!MM答曰:真人版的windows优化大师……极客哥们莫伤心,小戴安慰递纸巾。

28、 据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。” 项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。” 软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。” 

29、【高效的程序员】当世界末日还有5分钟就要到来的时候。程序员: 让我们在这最后的时刻作些什么吧!女友: 那好,让我们在做最后一次吧!程序员: 那剩下的4分50秒做什么啊?

30、【开发时间】项目经理: 如果我再给你一个人,那可以什么时候可以完工?程序员: 3个月吧!项目经理: 那给两个呢?程序员: 1个月吧!项目经理: 那100呢?程序员: 1年吧!项目经理: 那10000呢?程序员: 那我将永远无法完成任务。

31、一个程序员对自己的未来很迷茫,于是去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”上帝说:“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”。于是他去问Lippman。Lippman说:“程序员的未来就是驾驭程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝说:“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的”。于是他去问Gates。Gates说:“程序员的未来就是榨取程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝说:“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的”。于是他去问侯捷。侯捷说:“程序员的未来就是诱惑程序员”。这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”。上帝摇摇头:“唉,我的孩子,你还是别当程序员了”。

32、面试官:“熟悉哪种语言”。应聘者:“JAVA”。面试官:“知道什么叫类么”。应聘者:“我这人实在,工作努力,不知道什么叫累”。面试官:“知道什么是包?”。应聘者:“我这人实在   平常不带包 也不用公司准备了”。面试官:“知道什么是接口吗?”。应聘者:“我这个人工作认真。从来不找借口偷懒”。面试官:“知道什么是继承么”。应聘者:“我是孤儿没什么可以继承的”。面试官:“知道什么叫对象么?”。应聘者:“知道,不过我工作努力,上进心强,暂时还没有打算找对象。”。面试官:“知道多态么?”。应聘者:“知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系?”。

33、IT工程师=加班狂+程序员+测试工程师+实施工程师+网络工程师+电工+装卸工+搬运工+超人,有同感的转走。

34、 用一句话总结了HTML,CSS,JS的关系。HTML是名词,JS是动词,CSS是形容词和副词。

35、我是个程序猿,一天我坐在路边一边喝水一边苦苦检查bug。这时一个乞丐在我边上坐下了,开始要饭,我觉得可怜,就给了他1块钱,然后接着调试程序。他可能生意不好,就无聊的看看我在干什么,然后过了一会,他幽幽的说,这里少了个分号。。。分号。。。分号。。。

36、女友对程序员说:“紫禁城占得地方好大呀!”程序员:“杀死那个子进程……”

37、从前有个全国管理系统,是孙中山做的设计,老蒋做的实现,结果老毛写了个病毒,趁着日本黑客对系统做攻击的当口,拿到了管理员权限,把原来那批程序员给隔离了。老邓接手以后,重构代码,出了个2.0版,为了开发速度,遗留了一堆BUG没处理。人们纷纷质疑:是不是核心构架太单一,双核会不会好点?

38、一程序员家的水管坏了,他打电话叫来一个水管工修理。 水管工鼓捣了一个小时,终于把管子修好了,他递给程序员一张600元的帐单。 “600元!”程序员愤怒地说:“我当程序员一天都赚不了这么多钱!” “是啊。”水管工平静地说,“我当程序员的时候也是。”

39、十年前,女:“对不起,我不会喜欢你的,你不要再坚持了,就好比让 Linux 和 Windows 同时运行在一台PC机上,可能吗?”男生听后默默走开,十年后,在一次虚拟技术大会上,我听到一名虚拟技术开发程序员给我讲述了这个故事。

40、程序猿问程序媛:"为什么要离开我,我做得还不够好吗?" 媛说:"别傻了,我们根本就是两个世界里的人,就像在JS里永远都无法调用JAVA类一样,我们之间也是不可能的。" 猿沉默了很久,转身离开了。一个月之后,他在开源社区公布了dwr的完整代码。

41、【程序员被提bug之后的反应】1.怎么可能; 2.在我这是好的,不信你来看看; 3.真是奇怪,刚刚还好好的; 4.肯定是数据问题; 5.你清下缓存试试; 6.重启下电脑试试; 7.你装的什么版本的类库(jdk) 8.这谁写的代码; 9.尼玛怎么还在用360安全 浏览器 ; 10.用户不会像你这么操作的。

42、敲一夜代码,流两行老泪;用三种语言,唯四肢受罪 ; 待五更鸡鸣,遇骤雨初歇;遂登门而去,伫十里长亭;欲望穿泪眼,无如意郎君;借微薄助力,愿寻得佳偶;成比翼双鸟,乃畅想云端;卷情网之内,做爬虫抓取;为连理桂枝,容数据分析;思千里子规,助框广天地; 念茫茫人海,该如何寻觅?

43、早晨一女生抱着一堆书进了阅览室,结果警报响了,大妈让女生看看是哪本书把警报弄响了,那女生把书倒出来,准备一本一本的测。大妈见状急了,把书分成两份,第一份过了一下,响了。又把这一份分成两份接着测,三回就找到了,大妈用鄙视的眼神看着女生,仿佛在说O(n)和O(log2n)都分不清。

44、发现程序员经常熬夜有三个弊端:第一,记忆力越来越差;第二,数数经常会数错;第四,记忆力越来越差。

45、医院回来的程序猿一脸的苦逼样。程序媛:怎么了?程序猿:得了类风湿性关节炎了,我怕会遗传给下一代啊。程序媛:谁说类风湿性关节炎能遗传的?程序猿一脸诧异:类不是继承的吗?

46、知道JAVA程序员和C程序员的差别吗?食堂里,吃完饭就走的是JAVA程序员,吃完饭还要自己 收拾的那就是是C程序员。至于为什么会这样、大家都明白(因为JAVA自带垃圾回收机制、、、C需要手动释放内存)←这就是原因

47、计算机系的男同学追班里一女同学,结果此女总是躲躲闪闪。 男的看没戏,就另找了一个去追,结果这女的不满意了,质问这男的为啥抛弃她。 男的问:“请教一个电脑问题,如果你点击一个程序,总是提示‘没有响应’,怎么办?” 女的说:“马上结束任务。” 男的:“对,我也是这样想的。”

48、一个程序员的吐槽:即要被当做修电脑的,也要被当作做网站的;即要被当作杀毒的,也要被当作盗号的。我要告诉大家,其实我们只是写代码的。

49、如果一个足球界的人“猝死”了,会被怀疑和赌球有关;如果一个官员“猝死”了,会被怀疑和贪腐有关;如果一个农民"猝死"了,会被怀疑和拆迁有关;而如果一个程序员猝死了,那他真的猝死了。

50、老婆是操作系统,一但安装卸载十分麻烦;小秘是桌面,只要你有兴趣可以天天更换;情人是互联网,风光无限花钱不断;小姐是盗版软件,用时记着先杀毒。

51、前台美女三宝:你好,找谁,倒饮料。产品经理三宝:山寨,改版,再推倒。项目经理三宝:进度,流程,做报表。团队经理三宝:团建,开会,评绩效。数据分析师三宝:SQL,Excel,PPT。人事经理三宝:画饼,忽悠,挖墙脚。设计师三宝:修改,重做,飞机稿。程序员三宝:闷骚,加班,修电脑。

52、对于程序员来说、没老婆不悲催。悲催的是、没老婆、控制台还不停的提示你Error:could not find the object

53、假如生活欺骗了你,不要悲伤不要心急。《代码大全》会一直陪伴着你……

54、有时候真觉得有些事情如同char*一般,从开始就注定,无法改变。

55、洛阳亲友如相问,就说我在敲代码。

56、"如果你ctrl+alt+del,蹦出任务管理器,你从上到下扫一眼,所有的进程你都认识,知道他们是干什么的,并且知道关掉有什么后果,而且你还能从CPU和内存占用的数字跳动上清楚的知道电脑现在什么状态,那么你应该没有女朋友"...........你妹啊

57、用IE6的吃方便面都没有调料包,你知道不知道......

58、普通青年用IDE(Visual Studio, Eclipse, XCode);文艺青年用VIM, Emacs;二逼青年将IDE设置成VIM模式。

59、程序员换IDE相当于搬家,换主力语言相当于改嫁,换操作系统相当于参加FBI证人保护计划…

60、有两个程序员钓鱼,其中一个钓到一条美人鱼,这个美人鱼上半身是美女,下半身是鱼,于是这个程序员 就吧她放了,另一个问他:Why,他回答说:没有API

61、阿里小米皆自主,百度排名最公平;京东全网最低价,当当爱国很理性;用户体验看新浪,网易从来少愤青;豆瓣从来不约炮,人人分享高水平;从不抄袭数腾讯, 开放安全三六零。

62、编程夜当午,手握小滑鼠。谁知编程辛,行行皆“心”苦;头昏不觉晓,使劲揉眼角。夜夜太辛苦,睡眠知多少;

63、热火朝天的办公室,一精壮青年一边啃着馒头,一边看着眼前产品,愁眉紧锁的他陷入了沉思:产品下一步应该怎么走?如何保证代码质量?如何缩短项目时间?如何控制项目成本?一个个难题需要他思索,抉择。此时,传来项目经理的吆喝:“程旭元,先别敲代码了!给我修下电脑……”

64、原来《人月神话》不是本奇幻小说! 原来《代码大全》不是一堆开源代码! 原来《鸟哥的Linux私房菜》不是教你做菜! 原来《边城》不是教你写代码的! 原来《深入浅出HTML》不是教你How to Make Love

65、文艺程序员写代码追求让别人看懂,普通程序员追求让自己看懂,2B程序员则追求让编译器能看懂;半年后看自己当初写的代码,文艺程序员不知道是自己写的但很容易看懂,普通程序员知道是自己写的但是不太容易看懂,2B程序员埋头看了半天后拍着桌子吼到:“这是哪个SB写的程序!”

66、我真的想让这个世界变得更好,但是他们不给我源代码……

67、【梦醒时分(程序员版)】你说你写了不该写的代码,搞得程序全是bug。你说你定义了不该定义的接口,架构只能重写。你说你走查过了所有代码,找不到正确的地方。你说你感到万分沮丧,甚至开始不打算编程。

68、曾经有很多次机会可以避免bug,将项目按时,保质保量交付给客户,但我没有珍惜,等到世界末日,我才意识到,程序员界最痛苦的事莫过于此。如果玛雅人能给我一次重新选择的机会,让22号的太阳依然升起,我会重新做程序员,用代码改变世界!

69、据一位不愿透露姓名的程序员说,基本上所有客户的所有要求都能总结为下面这样一幅对联,上联:简单易用界面好,下联:稳定高效花钱少,横批:立马就要。

70、某女:你能让微博的人都吵起来,我今晚就跟你走。 某软件工程师:PHP是最好的语言! 某论坛炸锅了,各种吵架...。某女:服了你了,我们走吧,你想干啥都行。某软件工程师:今天不行,我一定要说服他们,PHP是最好的语言。

71、“我爱你”三个字,讲出来只要三秒钟,解释要三小时,证明却要一辈子。 “bug”三个字母,发现需要三秒,找到需要三小时,debug却要一辈子…...

72、生活不仅只是敲代码,还有...调bug..。

73、本人擅长Ai、Fw、Br、Ae、Pr、Id、Ps等软件的安装与卸载,精通CSS、JavaScript、PHP、C、C++、C#、Java、Ruby、Perl、Lisp、Python、Objective-C、ActionScript等单词的拼写,熟悉Windows、Linux、Mac OS、IOS、Android等系统的开关机,求一份月薪上万的工作!

74、刚在公交车上,一小朋友拿着一本英语书,问她爸爸:xxxxxx for 100 years,这里为什么用for呢?她爸说:你看,100 years时间很长很长,要循环100次才行,当然用for呀!我听到后,恍然大悟!

78、男朋友写代码不理我,于是我悄悄改掉了web.xml的一个配置,他搞了两天都没调通,我告诉了他,结果他要和我分手,我很伤心,但他的朋友告诉我,他没砍死你才说明他真的爱你…” “楼主别tm编了,程序员哪来的女朋友!” “SB,谁告诉你我是女的了。”

79、产品经理被绑,蒙眼,惊问:“想干什么?”,对方不语,鞭笞之,产品经理求饶:“别打,要钱?”,又一鞭,“十万够不?”,又一鞭,“一百万?”,又一鞭。产品经理崩溃:“你们TMD到底要啥?”“要什么?我帮你做项目,写代码的时候也很想知道你TMD到底想要啥!”

80、某男是程序员,每天半夜三更才回家。某女抱怨:“你就不能提早点回家么?” 某男:“好,一定。” 于是下次某男一直写代码到天亮提着油条豆浆才回家。

81、有人说,女程序员再淑女,一旦编程就会暴露自己的身份,习惯性的把前额的头发往上捋,露出大大的额头。因为CPU高速运作时需要良好的散热。

82、两个程序员在聊天:“我昨天碰到个辣妹。我把她带回家,马上就开始如饥似渴地亲吻,她就坐在我的键盘上,然后……” “你家里也有台电脑?啥配置啊?”

83、【如何夸程序员?】通用:你这代码写得真好看。夸C程序员:你这代码不看注释就能懂,写得真好。夸Ruby程序员:我艹,太神奇了,你怎么做到的!夸Perl程序员:这个正则表达式碉堡了。夸Python程序员:Pythonic!夸Java程序员:你写的代码一点都不像Java!

84、昨晚去KTV找小姐。 美女:请问先生需要什么类型的? 我:学过编程的都给我出来! 美女:我就是啊! 我:两个小时,把Bug给找出来,我着急要! 美女:客官请自重,小女子卖身不卖艺……

85、某程序猿,一直不为女朋友家人所待见。过完年回来,突然宣布说他们准备今年结婚,这让人很是诧异女方家里何以松口了。本着八卦的心态打听之后才知道——程序猿春节前自己搞了个小软件,把女方家的七姑妈、八大姨的春运火车票都给解决了……他真得感谢12306!

86、对于各种凌乱的电脑问题,其他行业的人,以为程序员们什么都会;程序员中的女程序员,以为男程序员什么都会;男程序员中一般程序员,以为技术好的程序员什么都会;技术好的程序员每次都在网上苦苦找答案。。。

87、程序员跟产品经理一起看电视。每个节目看到一半程序员就换台,看到一半就换台,几次之后产品经理终于忍无可忍的咆哮:老子刚看出点意思你就换、刚看出点意思你就换,到底还让不让人看啦?!程序员淡定的盯着电视道:你半路改需求的时候我可没吱过声!

88、菜鸟:“我该怎么学习WEB编程呢?”大牛:“WEB编程就是一个程序员带着两个MM(MSSQL与MYSQL),玩3P(JSP,PHP,ASP),然后学着How to make love(HTML)..”

89、两程序员向同一个MM求爱,MM说"去环游世界后再来找我!"。码农A立即收拾行李出发。码农B绕MM一圈,然后说"hello world!",立即感动了MM。其实他只是习惯在做任何新事情前先确定hello world能跑通而已。

90、【世界上最没用的几句话】 1、警察:不要跑! 2、国足:必胜! 3、老师:同学们不要睡了! 4、病人:医生,您轻点儿! 5、父母:孩子,不要闹了 !6、罪犯:我是冤枉啊!7、女人:不要嘛!8、男人:我发誓!9、程序员:这个不能实现。

原文连接:http://blog.sina.com.cn/s/blog_883c46a60101a8ex.html

posted @ 2013-05-19 23:27 管先飞 阅读(373) | 评论 (0)编辑 收藏

1、Controller:
               Map<String, Object> rootMap = new HashMap<String, Object>();
ootMap.put("list",getMusicPublisList(page.getList()));
String templateName="appweb/music/index.ftl";
  Render appRender=new AppFreeMarkerRender(rootMap,templateName);
  this.render(appRender);
2、AppFreeMarkerRender(在FreeMarkerRender上修改):
package com.microcorecn.common.utils;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
import com.jfinal.render.Render;
import com.jfinal.render.RenderException;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
/**
 * FreeMarkerRender.
 */
public class AppFreeMarkerRender extends Render {
private static final long serialVersionUID = -7649769283048920381L;
private transient static final String encoding = getEncoding();
private transient static final String contentType = "text/html; charset=" + encoding;
private String templateName;
private Map<String, Object>  rootMap;
public AppFreeMarkerRender(Map<String, Object> rootMap, String templateName) {
  this.templateName=templateName;
  this.rootMap=rootMap;
}
    
@SuppressWarnings({"unchecked", "rawtypes"})
public void render() {
response.setContentType(contentType);
        Enumeration<String> attrs = request.getAttributeNames();
Map root = new HashMap();
while (attrs.hasMoreElements()) {
String attrName = attrs.nextElement();
root.put(attrName, request.getAttribute(attrName));
}
         root.putAll(rootMap);
         
PrintWriter writer = null;
        try {
Template template = FreemarkerUtil.getAppConfiguration().getTemplate(this.templateName);
writer = response.getWriter();  //一边请求,一边render
template.process(root, writer); // Merge the data-model and the template
} catch (Exception e) {
throw new RenderException(e);
}
finally {
if (writer != null)
writer.close();
}
}
}
3、FreemarkerUtil :
package com.microcorecn.common.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.jfinal.kit.PathKit;
import com.jfinal.render.FreeMarkerRender;
import freemarker.cache.FileTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
/**
 * freemarker生成html的工具类
 * 
 * @author Administrator
 * 
 */
public class FreemarkerUtil {
//保存所有参数,js路径,cs路径等
private static Map<String, Object> releaseParams = new HashMap<String, Object>();
static{
//releaseParams.put("csspath", "");
}
//配置
private static Configuration config = null;
private static Configuration appConfig = null;
/**
* appConfig配置所有参数
* 重写freemarker中的  reader方法,读取该配置文件
* @return
*/
public static Configuration getAppConfiguration()
{
if(appConfig == null)
{
//从freemarker中获取所有配置
appConfig = (Configuration)FreeMarkerRender.getConfiguration().clone();
try {
//设置模板路径
/* config.setDirectoryForTemplateLoading(new File(PathKit.getWebRootPath()));
config.setObjectWrapper(new DefaultObjectWrapper());*/
appConfig.setDirectoryForTemplateLoading(new File(PathKit.getWebRootPath()+"/WEB-INF/views/"));
appConfig.setObjectWrapper(new DefaultObjectWrapper());   
} catch (IOException e) {
// TODO log
}
}
return appConfig;
}
posted @ 2013-05-19 14:16 管先飞 阅读(4946) | 评论 (2)编辑 收藏

1、<数据库用户>
本地用户
  GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
  注:第一个*为数据库名
所有用户(有的版本不包含本地用户,还有加上上面一名)
 GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
</数据库用户>

2、<数据库导出>
导出数据结构
   C:/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump -uroot -proot -d tienal_admin > c:/tienal_admin.sql   
导出数据结构与数据
   C:/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump -uroot -proot tienal_admin > c:/tienal_admin.sql
   </数据库导出>

3、<数据库导入>
从MySQL命令行
    use tienal_admin;
    source E:/PeaceWork/Project/天籁音乐/原始资料/tienal_admin/misc/sql.sql;
直接运行
   C:/Program Files/MySQL/MySQL Server 5.5/bin/mysql -uroot -proot tienal_admin < c:/tienal_admin.sql    
</数据库导入>

posted @ 2013-05-19 13:57 管先飞 阅读(1865) | 评论 (0)编辑 收藏

1、下载andriod-sdk:
下载地址:http://developer.android.com/sdk/index.html
     安装程序及安装相应的组建。
2、环境变量的配置:
新建环境变量:
ANDRIOD:C:\Program Files\Android\android-sdk\platform-tools;C:\Program Files\Android\android-sdk\tools
path:%ANDRIOD%
3、安装Eclipse插件(Eclipse中安装配置ADT插件):
http://developer.android.com/sdk/index.html
下载地址:http://dl.google.com/android/adt/adt-bundle-windows-x86-20130219.zip
4、java环境变量的配置:
http://www.blogjava.net/17learning/archive/2013/03/01/395884.html



  


posted @ 2013-05-12 11:37 管先飞 阅读(278) | 评论 (0)编辑 收藏

1、全选:
 $(function() {
   $("#selectAll").click(function () {
      $("input[name='checkbox']").each(function(idx, item) {
item.checked = true;
});
   });
     });
2、反选:
$(function() {
$("#invertSelect").click(function() {
$("input[name='checkbox']").each(function(idx, item) {
item.checked = !item.checked;
});
});
});
3、得到选中的值:    
$(function() {
$("#addPlayList").click(function() {
var checkedObj = $('input:checkbox[name="checkbox"]:checked');
var files=[];
checkedObj.each(function() { 
                files[files.length] =this.value; 
        }); 
if(files.length==0){
  alert("请选中需要加入播放列表的歌曲");
} else{
var items = [];
             for(var i=0;i<files.length;i++){
              if(files[i]){
                 var item = eval("(" +files[i] +")");
                  items[items.length] = item;
              }
             }
             InvokeNative.playMusic(items);
}
});
});
4、鼠标点击后得到单个值:
function play(vthis){
 $(vthis).find('input:checkbox').each(function(idx, itemssss){
var tt = eval("(" +itemssss.value+")");
InvokeNative.playMusic(tt);
   });
//InvokeNative.playMusic(jsonItem);
}
find:查找多层、依次遍历  childrend 只查找一层。







posted @ 2013-05-08 15:02 管先飞 阅读(239) | 评论 (0)编辑 收藏

1、改变eclipse 中代码字体大小,就是我打进去的java文件的字体大小(colors and fonts)

wiondow--preferences--general--appearance--colors and fonts--java--java editor text font

设置为:Courier New
posted @ 2013-05-08 09:48 管先飞 阅读(184) | 评论 (0)编辑 收藏

问题原因:JFinal中根据索引查询列名。
1、重新新建DB类:
package com.microcorecn.jfinalex;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.jfinal.plugin.activerecord.ActiveRecordException;
import com.jfinal.plugin.activerecord.DbKit;
public class DbEx {
static <T> List<T> query(Connection conn, String sql, Object... paras) throws SQLException {
List result = new ArrayList();
PreparedStatement pst = conn.prepareStatement(sql);
for (int i=0; i<paras.length; i++) {
pst.setObject(i + 1, paras[i]);
}
// for (int i=0; i<paras.length; i++) {
// pst.setObject(i + 1, paras[i]);
// }
ResultSet rs = pst.executeQuery();
int colAmount = rs.getMetaData().getColumnCount();
String[] cols = new String[colAmount];
for(int i = 0; i < colAmount; ++i)
{
cols[i] = rs.getMetaData().getColumnLabel(i + 1);
}
if (colAmount > 1) {
while (rs.next()) {
Object[] temp = new Object[colAmount];
for (int i=0; i<colAmount; i++) {
temp[i] = rs.getObject(cols[i]);
}
result.add(temp);
}
}
else if(colAmount == 1) {
while (rs.next()) {
result.add(rs.getObject(cols[0]));
}
}
if (rs != null) {try {rs.close();} catch (SQLException e) {}}
if (pst != null) {try {pst.close();} catch (SQLException e) {}}
return result;
}
public static <T> List<T> query(String sql, Object... paras) {
Connection conn = null;
try {
conn = DbKit.getConnection();
return query(conn, sql, paras);
} catch (Exception e) {
throw new ActiveRecordException(e);
} finally {
DbKit.close(conn);
}
}
}
2、查询信息:
List<Object[]>  newAlbum=DbEx.query(sb.toString(), singerItem.get("id"));
if (newAlbum!= null) {
for(Object[] obj:newAlbum){
item.setBfpSingerId(obj[0]==null?"":obj[1].toString());
item.setSingerName(obj[1]==null?"":obj[1].toString());
item.setImgUrl(obj[2]==null?"":obj[2].toString());
item.setBfpAlbumId(obj[3]==null?"":obj[3].toString());
item.setNewAlbumName(obj[4]==null?"":obj[4].toString());
}

posted @ 2013-04-02 18:40 管先飞 阅读(490) | 评论 (0)编辑 收藏

LEFT JOIN 关键字语法:
SELECT column_name(s) 
FROM table_name1
LEFT JOIN
table_name2
ON
table_name1.column_name=table_name2.column_name

高级应用:
SELECT  	
had.deptTypeId as deptTypeId
,hdt.typeName as deptTypeName
,had.id as deptID
,had.deptName as deptName
,isnull(sg.siteGoalPoint,0) as siteGoalPoint
,isnull(sg.supGoalPoint,0) as supGoalPoint
from
--单位
(select a.deptTypeId,a.id,a.deptName
from HD_ACT_DEPT a
where 1 = 1
and deptTypeId = 'null'
) as had
LEFT JOIN
--单位类型
HD_DEPT_TYPE hdt
ON had.deptTypeId = hdt.id
LEFT JOIN
--任务完成情况统计表
(select a.siteGoalPoint,a.supGoalPoint,a.deptTypeId,a.deptID
from cms_sup_submit_goal a
where a.year = '2013'
) as sg
on had.deptTypeId = sg.deptTypeId and had.id = sg.deptID
ORDER BY had.deptTypeId, had.id
多表查询:
select s.id,s.name,s.sname from 
singer s, tb_su su
where s.id=su.sid  and  su.userid='1'
posted @ 2013-03-28 23:41 管先飞 阅读(440) | 评论 (0)编辑 收藏

在Ecshop中使用EasyEclipse for PHP开发时候模版文件显示为文本颜色,将模版文件的风格设置为html的风格:
选择Windows--->Preferences--->General--->Content Types--->Text--->html--->add--->输入Dwt即可。
posted @ 2013-03-19 22:12 管先飞 阅读(467) | 评论 (0)编辑 收藏

在PHP中调试程序可以使用断点调试:
print "<pre>"; //格式化数组
print_r("断点调试"+array());//断点打印出,可以是数组
exit;
posted @ 2013-03-18 10:17 管先飞 阅读(319) | 评论 (0)编辑 收藏

1、首先安装wampserver。
2、鼠标右键wampserver托盘图标--->language---->chinese.
3、配置PHP: 鼠标左键wampserver托盘图标-->PHP--->php设置--->short Opn tag(设置PHP标签类似方法,重启服务器)。
4、配置apache的虚拟目录:
     鼠标左键wampserver托盘图标--->apache-->Alies目录---->添加一个alies目录。弹出一个控制台输入:Test----> 回车--->T:\WorkSpace\workespacePhp.必须在计算机上存在目录(T:\WorkSpace\workspacePhp\Test).
     如果想用http://127.0.0.1/直接访问test下的index.php.操作步骤如下:
       鼠标左键wampserver托盘图标--->apache-->Alies目录-->http://127.0.0.1/test/edit alies:删掉红色字体
        Alias /Test/ "T:/workSpace/workespacePhp/" 
  <Directory "T:/workSpace/workespacePhp/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
        Order allow,deny
    Allow from all
</Directory>
5、配置Mysql:mysql  root默认密码为空,修改mysql的密码:
(1)、运行CMD:
(2)、cd到mysql的安装目录:(D:\DesigerFiles\wamp\bin\mysql\mysql5.5.8\bin)
(3)、mysqladmin -u root -p  password admin
  如果(3)不支持,则进入(4)。
 (4)、将D:\DesigerFiles\wamp\bin\mysql\mysql5.5.8\bin加入到环境遍历中。
  (5)、mysqladmin -u root password admin
 
6、如果不使用wampserver,配置方法如下:
  http://www.jb51.net/article/24691.htm
  http://wenku.baidu.com/view/c794f80102020740be1e9bb2.html

    
      
posted @ 2013-03-18 09:48 管先飞 阅读(480) | 评论 (0)编辑 收藏

Object data=getObject();
if(data instanceof String) {
  this.renderJson((String)data);
  }else {
  this.renderJson(data);
}
posted @ 2013-03-15 09:05 管先飞 阅读(6362) | 评论 (2)编辑 收藏

文章开头就列举了那么多联系方式,难免会让大家感觉有点AD的意味,但是不容质疑的是,默默的确有那么丁点的表现欲^_^,虽然有时候过于细致会被人说婆妈,但是幸好这种细致对于编程来说,还是蛮有益的
    从默默自己向别人问怎么学PHP开始,到后来不少人又来问默默怎么学PHP,不管默默是新手,还是老鸟,似乎总是感觉摸不出一条清晰的脉络来,不过,默默既然学会了PHP,那么我走的这条路或多或少的有一定借鉴性。
    PHP的背景恐怕就不用默默赘言了,我相信大家选择一种语言,并不是看它的背景和悠久历史,更重要的是看它的实用性,华而不实的语言哪怕是再辉煌的历史,也毕将步向没落,可喜的是PHP经受住了考验,也因此,它确实是一种值得学习的语言。
    默默一直是听从别人的经验长大的,也因此在前辈们的经验里让默默少走了许多的弯路,更快的步入了正规,在此向那些我至尽不知道其名字的前辈们道声谢谢,在默默的眼里,帮助不分大小,只要是帮助,总会让默默的心里暖融融的,我想,前辈们帮助我,并不是为了得到我的一句谢谢,更多的是出于一种责任感和对默默的期望,所以我想,只有学好PHP,才能对得起前辈们的汗水。
    正如我所说的,默默也终于感觉到了一种责任感,默默不知道自己的经验到底能帮助新手多少,但是默默明白,现在到了履行责任的时候了,我有必要把自己的经验告诉给所有希望学好PHP的人,只有这样才能让中国的PHP不断的进步,不断的发展,在世界上占据一席之地。
    默默学习PHP的这段期间,感觉国内的PHP环境越来越成熟,规范也在逐渐的健全,PHPCHINA的成立,标志着与官方直接挂钩的PHP机构在中国正式落户了,在此献上迟到的掌声!
    好的,切入正题:
    我想在讲述自己的学习方式前,对那些期望能从我的文章中获得有用信息的人说一句心里话:
    默默的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。
    我先把我自己学习PHP的过程做一下概括(老鸟学PHP路线:php基础--》OOP--》smarty---》thinkPhp):
      (1)熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度
        (2)理解动态语言的概念,运做机制,熟悉PHP语法
        (3)学习如何将PHP与HTML结合起来完成简单动态页面
        (4)接触MYSQL,开始设计数据库程序
        (5)不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板
        (6)完成一个功能齐全的动态站点
        (7)学习smarty模版技术。
       (8)学习使用ThinkPHp的框架思想。

    我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单,即使是小吃部的烧饼也不是一下子就会做成的。
    我先解释一下我的学习思路。
    首先,理解网站这一概念之后不难看出,任何网站都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了HTML,才能为今后制作网站打下基础。
    在学习HTML中我想边学边做是最有效的方式,当然这一方式对于学习PHP同样是最有效的。
    HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西
    也许您在学习PHP的时候只想尽快的开发一个网站,也就会想我做网站,干嘛要学什么网页这些小儿科?不难看出,眼高手低的新手不在少数,这种思想无疑于建造空中楼阁,你不建地基,何来的房顶呢?
    OK,掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。
    我假设你目前已经可以完成一个静态页面了,当然,做的好看难看是另外一说,默默的第一个网页也没好看到哪去,但是“孩子”再丑,咱们做“爹妈”的也不能嫌弃不是?这毕竟是咱的成果。
    那么咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而是经过处理的,说白了,HTML是经过HTML解析器,而PHP当然也就通过PHP解析器了,跟学习HTML一样的道理,想让任何的解析器完成操作,就必须使用它们专用的语法结构,所以PHP长相奇怪也就不足为奇了。
    对于PHP的理解是新手最难迈过的一道门槛,不过你应该感到幸运的是PHP已经最大极限的为了新手而努力了,如果你学过其他的语言,也许会觉得PHP的确相当的简单,但是如果你之前什么都没学过,那么阿弥陀佛,硬着头皮琢磨吧。
    书过三遍自然熟,这个简单的道理告诉我们,即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。
    在一段挣扎之后,聪明的你,显然已经逐渐的开悟了,慢慢的理解了编程的概念,那么祝贺你,你已经迈出了成功的第一步。
    搞清楚HTML和PHP的概念,那么PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。
    高兴一段时间就必须继续努力了,接下来就是学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。
    头晕归头晕,目眩归目眩,你不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。
    在一番搏斗之后,你终于理解了数据库的概念,而且让你兴奋不已的是你终于可以通过PHP来连接数据库了,这期间你是怎么学会的,我们不去考证了,但是事实证明,你已经可以了。
    学会了PHP和数据库的你,无疑是左手拿着MOTOLOLA右手拿着NOKIA,要多潇洒,有多潇洒,哈哈,终于学会了,但是可能这个时候,又会有人不经意的拍拍肩膀对你说:哥们,别高兴的太早,你还是菜鸟,离学会还差着一大截呢!
    等到你发奋努力的学会了用PHP成功的插入,删除,更新数据的时候,显然,你已经距离成功指日可待了。
    这个时候的你也许是这种状态:
        你会HTML吗?会,我能编好几个大表格排板的网页啦!
        你会PHP吗?会,我会把一加一的运算写在函数里,然后调用啦!
        你会MYSQL吗?会,我会把我的信息在数据库里插入删除啦
    那,接下来你该怎么做呢?我觉得,小试一下身手,大概是没问题了,那么交给你个任务,做个留言本吧,这和HELLO WORLD有一比啊!^_^,同是新手面临的第一道关。
    花了一段时间,你终于学会表单的数据插入数据库,然后显示出来了,应该说一个程序的雏形已经诞生了。
    但是,你可能瞅瞅东,看看西,人家这个编论坛,那个CMS,还有那啥CRM,我啥时候写一个呢?
    不要急,可以说你的马步已经扎的差不多了,接下来就要开始练把势的时候了,如果有条件的话,用笔或者打印一个简易的PHP手册在身上,时不时的摸出来看看,记得,去WC也不能放过(^2^)。
    再有条件的话,买本书看看吧,《PHP+MYSQL WEB开发(第三版)》号称圣经级,(也许是个不错的选择(声明:作者没给我啥好处费,我也不是书托,隔着大老远,我连他老兄的面都没见过的说-_-)
    巩固了自己的知识,熟悉了PHP和MYSQL开发的要领之后,再回头看你写的那个留言本,你也许会怀疑那真的是你写的吗?当然,如果屋里还有鬼的话,也许是它写的-_-
    这个时候,你的留言本应该加入注册以及分页功能了,而如果你更强的话,UI(用户界面)也可以加强,完成之后,感觉是不是特有成就感?不管怎么样,咱好歹是写了一个动态网站程序了,放在自己的网站上耍耍吧,让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。
    几天之后你再打开留言本,哎?哇,一下弹出N多页面!很明显,你的留言本并没有做好安全防范,被人用JS代码小小的耍了一下,我很同情你这个时候的感受,但是没有别的办法了,继续努力吧!
    你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。
    那么接下来,这就算学会啦?NO,NO,NO,还早呢,你至尽还没碰过OOP之类的吧?模板呢?
    恩,学!加紧学呀学,学会了这些之后,你又学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...
    总而言之,你绝对不会发现你全部都学会了,一些真正的强人总会搞出新玩意来丢给你,你不学就落后了,也印证了前人的经验,果然是学无止境啊!
    我想通过我的一番YY,你也应该大致熟悉了一些学习过程,也许我的过程和你的有些出路,但是不管怎么样是殊途同归,我写这么多,也只是给大家一个借鉴的机会,至于好与不好,默默不敢打包票^0^
    看完之后你发现,罗嗦这么多,对我一点用处没有啊,我知道该怎么学,但是我想如何才能更快的学,一周速成,啊不,24小时速成那种,默默你有没?
    我.......我没有,但是2分钟之内把你扁进医院里,我倒是有把握-_-
    学东西,永远不要妄想有速成这一说,告诉你了一个方式,但是缺少努力这一环节,那也是白搭。
但是有一点我可以给你保证的就是,你学会了PHP,那么学其他的语言,肯定速成,反过来也一样,如果你之前学过其他的语言,那么学PHP肯定快。
    不过语法好学,但是怎么用语法来实现每个人都有每个人的方式,几乎是各有千秋。然而借鉴别人成功的代码,绝对是有益无害,因此,多看那些经过千锤百炼凝出来的经典代码,是进阶的最好方法。
    讲了这么多,无非是想说:学习PHP不仅要掌握方法,更多的是付出汗水,我不希望看到中途放弃的人,相信自己,相信自己的选择,更要相信自己的能力,如果自己想放弃,暴力一点的话,就自己抽自己一个嘴巴,然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了)
    另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学,也得学会了PHP。然后再学,见异思迁是最不可取的,狗熊掰玉米就是这个道理,如果经常中途放弃,只能是一无所获,还浪费了N多的时间和经历,得不偿失,最重要的是,你会被别人瞧不起,没有人会喜欢和见异思迁的人交朋友,因为这种人太不安分,太不可靠,因此,你必须要强迫自己完成自己的目标,哪怕可能会很难受,也得坚持,毅力就是这么锻炼出来的。
(字数打多了,超过发帖限制,请在下面接着看^_^)

原文:http://www.xici.net/d96104995.htm有删改


posted @ 2013-03-14 14:06 管先飞 阅读(383) | 评论 (0)编辑 收藏