月度归档: 2015年9月
Discuz的2003 cannot connect错误的一种解决方法
今天早上,无缘故的出现Discuz论坛无法连接的黄页,黄页的内容是discuz 2003 notconnect.
从表面上看是由于数据库无法连接导致的,但是查看了数据库的mysql服务,是正常启动的,无论是外部还是内部,都是可以连接数据库的.找了很多方法都没有办法定位原因,当然也没有办法解决.
突然间想到SELINUX,搜索了一下,发现SELINUX的确有可能会导致一些服务出现异常,
搜索了一下,网上有比较多的解决方法.一种是直接把SELINUX关闭.
一、查看SELinux状态命令:
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
二、关闭SELinux方法:
1、临时关闭(不用重启机器):
代码如下:
setenforce 0 #设置SELinux 成为permissive模式 #setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可.
另一种办法没有那么激进,添加SELINUX允许DB的远程访问.
修改apache远程访问数据库的布尔值
setsebool httpd_can_network_connect_db 1
什么是SELINUX
SELinux在linux中是保护系统的重要工具,它可以最大限度的保护系统的安全。也许有的人在使用过程中尝试着关闭过此工具,但是当考虑到要架设服务器的话,那就得重视它了。
假设我们希望允许远程匿名访问 Web 服务器,我们必须通过防火墙打开端口。然而,这意味着恶意人员可以尝试利用安全漏洞以及,如果他们损坏 Web 服务器进程,获得 apache 用户和 apache 组的权限来强行进入系统。懂点安全知识的人就知道很危险了,用户 / 组具有 document root ( /var/www/html )等的读取权限以及 /tmp 、/var/tmp 所有人均可写的任何其他文件 / 目录的写入权限。
SELinux 是一组可确定哪个进程能访问哪些文件、目录、端口等的安全规则。每个文件、进程、目录和
端口都具有专门的安全标签,称为 SELinux 上下文。上下文只是一个名称, SELinux 策略使用它来确定
某个进程是否能访问文件、目录或端口。默认情况下,该策略不允许任何交互,因此明确的规则授予访
问权限。如果没有允许规则,则不允许访问。
总之,SELinux 的目标之一是保护用户数据免受已泄漏的系统服务的威胁
SELinux 模式
为了进行故障排除,我们可以临时禁用 SELinux 保护,使用 SELinux 模式。
强制模式, SELinux 主动拒绝访问尝试读取类型上下文为 tmp_t 的文件的 Web 服务器。在强制
模式中, SELinux 不仅记录而且提供保护。
许可模式通常用于对问题进行故障排除。在许可模式中,即使没有明确规则, SELinux 也允许所有交
互,并且记录所有被拒绝的交互。此模式可以用于确定您是否有 SELinux 问题。无需重新引导即可从
强制模式转为许可模式,或再从许可模式转回强制模式。
禁用模式将完全禁用 SELinux 。您必须重新引导才能彻底禁用 SELinux ,或者从禁用模式
转为强制模式或许可模式。
装修清单
装修预算清单
辅料
- 电线
- 油漆
- 水管
- 水泥,黄沙
主材
- 瓷砖
- 地板
- 马桶
- 水槽
- 台盆
- 吊顶
- 油烟气灶
- 室内门
人工
- 水电
- 泥工
- 木工
- 油漆
家具
- 柜子门
- 电视柜,卧室柜子
- 床
五金
- 卫生间五件套
- 厨房五件套
- 门栓
- 门锁
- 衣柜五金套件
家居用品
- 沙发
- 窗帘
- 地毯
解决JSP乱码问题的方式和思考途径
JSP中的乱码问题是一个普遍的问题,对于初学者来说,没有经历过乱码,不算是真正的初学者。但是,乱码的解决方法却是有一定的策略的。一般来讲,需要做到以下几点。
1. 修改MYSQL服务器的编码
修改MYSQL的my.ini配置文件
default-character-set=utf8
2.修改MYSQL数据库的编码
修改已有的数据库编码
ALTER DATABASE databaseName CHARACTER SET utf8;
由于修改数据库编码不会影响到已经存在的表的编码,因此,还需要修改已经存在的表。
ALTER TABLE table_name CHARACTER SET utf8;
3.修改Tomcat服务器的默认编码
Tomcat的server.xml中有编码设置,设置如下
<Connector prot=“8080” protocol=“HTTP/1.1” connectionTimeOut=“2000” redirectPort=“8443” URIEncodeing=“UTF-8”/>
4.修改JSP的页面编码
JSP页面的编码通常包括文件本身的编码和页面顶部的声明的编码
<%@ page language="java" import="java.util.*” pageEncoding="utf-8"%>
5.修改数据库连接字符串的编码
在创建connection时指定编码的方式,代码如下
Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/databaseWeb?unicode=true&characterEncodeing=UTF-8”,”root”,”admin”);
说说我家的规划
JSP连接数据库总结
最近学习Java,终于到了连接数据库了,各种教程中给出的示例都是Mysql适用的,不可否认,Java+Mysql算是一个不错的组合,全开源免费的环境也是互联网公司的最爱.
不过,很多系统还是SQL Server的,如果想一夜之间把这些系统换掉是一个不太可能的任务.
1. 下载并引入驱动包.
到微软官方站点下载驱动包,http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=21599.然后放到WebRoot\Web-INF\lib下面既可.我用的是sqljdbc4.jar,所说这个比较新.
2. 接着在页面顶端添加数据库所必须的几个引用.
<%@page import="java.sql.DriverManager" %> <%@page import="java.sql.Connection" %> <%@page import="java.sql.Statement" %> <%@page import="java.sql.ResultSet" %> <%@page import="com.microsoft.sqlserver.jdbc.SQLServerDriver"%> <jsp:directive.page import="java.sql.Date"/> <jsp:directive.page import="java.sql.Timestamp"/> <jsp:directive.page import="java.sql.SQLException"/>
3. 再然后就是加载驱动,打开连接,建立查询命名,返回查询结果集,显示结果了.
具体的代码如下.
Connection conn=null; Statement stmt=null; ResultSet rs=null; String JDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";//SQL数据库引擎 String connectDB="jdbc:sqlserver://172.17.10.15//dev;DatabaseName=tech_doc";//数据源 try { Class.forName(JDriver);//加载数据库引擎,返回给定字符串名的类 conn=DriverManager.getConnection(connectDB,"User","Password"); stmt=conn.createStatement(); rs=stmt.executeQuery("select top 10 * from access_group"); while(rs.next()){ String group_id=rs.getString("group_id"); String group_name=rs.getString("group_name"); } } catch(SQLException ex){ out.println(); ex.printStackTrace(); }finally{ if(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); }
JAVA编程不得不看的几本经典书籍
入门类
1.《java从入门到精通》(第3版)
【内容介绍】
本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发应该掌握的各方面技术。全书共分28章,包括:初识Java,熟悉Eclipse开发工具,Java 语言基础,流程控制,字符串,数组,类和对象,包装类,数字处理类,接口、继承与多态,类的高级特性,异常处理,Swing程序设计,集合类,I/O输入输出,反射,枚举类型与泛型,多线程,网络通信,数据库操作,Swing表格组件,Swing树组件,Swing其他高级组件,高级布局管理器,高级事件处理,AWT绘图与音频播放,打印技术和企业进销存管理系统等。所有知识都结合具体实例进行介绍,涉及的程序代码给出了详细的注释,可以使读者轻松领会Java程序开发的精髓,快速提高开发技能。
【推荐理由】
本书内容详尽,实例丰富,非常适合作为编程初学者的学习用书,也适合作为开发人员的查阅、参考资料。
2.《java核心技术卷一》
【内容介绍】
本书是Java技术经典参考书,多年畅销不衰,第7版在保留以前版本风格的基础上,涵盖Java2开发平台标准版J2SE5.0的基础知识,主要内容包括面各对象程序设计、反射与代理、接口与内部类、事件监听器模型、使用Swing UI工具箱进行图形用户界面设计,异常处理、流输入/输出和对象序列化、泛型程序设计等。本书内容翔实、深入浅出,附有大量程序实例,极具实用价值,是Java初学者和Java程序员的必备参考书。
【推荐理由】
本书出版以来,深受广大读者的喜爱,它全面介绍了Java SE的基础知识,不但具有使用价值,而且易于阅读,易理解,它必成为想进军Java和基础薄弱同学的不二之选。
3.《java编程语言》
【内容介绍】
本书以Java语言创建者的独特视角向读者展现了为什么以及如何使用Java语言,以便读者理解Java语言的基本设计目标以及它在现实世界中的应用。本书介绍的是Java语言的最新版本,该版本在《Java Language Specification,Second Edition》中定义,在Java2SDK1.3标准版中实现。本书已是第三版,在经构上相对前两版有所调整,重点讲述了新的语言特征,并提供了新API的使用实例。本书完全覆盖了Java语言当前版本的特征和类库,可以作为Java语言的入门向导,也可作为高级Java开发及Java语言教学的参考用书。
【推荐理由】
本书介绍的是Java语言的最新版本,该版本在《Java Language Specification,Second Edition》中定义,在Java2SDK1.3标准版中实现。本书已是第三版,在经构上相对前两版有所调整,重点讲述了新的语言特征,并提供了新API的使用实例。本书完全覆盖了Java语言当前版本的特征和类库,可以作为Java语言的入门向导,也可作为高级Java开发及Java语言教学的参考用书。
进阶类
1.《java编程思想》
【内容介绍】
本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。
【推荐理由】
本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在BruceEckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。
2.《java核心技术卷二》
【内容介绍】
《JAVA核心技术卷2:高级特征》是Java技术权威指南,全面覆盖Java技术的高级主题,包括流与文件、XML、网络、数据库编程、高级Swing、高级 AWT、JavaBean构件、安全、分布式对象、脚本、编译与注解处理等,同时涉及本地化、国际化以及Java SE 6的内容。《JAVA核心技术卷Ⅱ:高级特征》对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java类库的相关特性。
【推荐理由】
本书是经典的《Java核心技术,卷II:高级特性》的最新修订版,涵盖了Java SE6平台的高级用户界面程序设计和企业特性。与第1卷(涵盖了核心的语言和类库特性)一样,本卷已经更新到了JavaSE6。并且对新内容都作了重点标注。书中所有的示例程序都进行了详细的设计,用来演示最新的编程技术。并展示针对专业开发者在现实中所碰到的典型问题的最佳解决方案。本书包含有关StAXAPI、JDBC 4、编译器API、脚本框架、闪屏和托盘API以及其他许多JavaSE6改进特性的新章节。本书聚焦于Java语言中更高级的特性,包括下列内容:流与文件、网络、数据库编程、XML、JNDI与LDAP、国际化、高级GUI组件、Java2D、JavaBeans、安全、RMI与Web服务、高级AWT、注解、本地方法。
3.《疯狂java讲义》
【内容介绍】
本书深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制。共覆盖了java.awt、java.lang、java.io和java.nio、java.sql、java.text、java.util、javax.swing包下绝大部分类和接口。
【推荐理由】
本书并不单纯从知识角度来讲解Java,而是从解决问题的角度来介绍Java语言,所以本书中介绍了大量实用案例开发。这些案例既能让读者巩固每章的知识,又可以让读者学以致用、激发编程自豪感,进而引爆内心的编程激情。本书光盘里包含书中所有示例的代码,如果读者希望获得课后练习的程序代码。
本书为所有打算深入掌握Java编程的读者而编写,适合各种层次的Java学习者和工作者阅读,也适合作为大学教育、培训机构的Java教材。但北大青鸟光谷校区专业老师认为,如果只是想简单涉猎Java,则本书过于庞大,不适合阅读。
JavaEE类
1.《javaWeb整合开发王者归来》
【内容介绍】
本书全面介绍了Java Web开发中的各种相关技术及知识。全书分为9篇,内容层次清晰,难度循序渐进。第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、数据库概述、JDBC详解、XML概述等;第4篇为Struts框架篇,内容不仅包括Struts 1.x的内容,也包括Struts 2.x中的内容;第5篇为Hibernate框架篇;第6篇为Spring框架篇;第7篇为EJB与Web服务篇,内容包括EJB 3概述、JPA规范Web服务框架XFire等;第8篇为工具篇,内容包括在Java Web项目中常用的开源工具框架、主要有版本管理工具SVN、日志工具commons-logging与Log4J、报表图形引擎JFreeChart、PDF组件iText等;第9篇为实战篇,内容为两个典型的应用系统:论坛系统(Spring+Struts+Hibernate)、宠物商店(EJB 3+JPA+Struts 2)。
【推荐理由】
资深Java程序员耗时一年时间写作,十年开发经验毫无保留。全面、系统、深入介绍Java Web开发的核心技术与主流框架。
2.《spring 入门到精通》
【内容介绍】
本书由浅入深,循序渐进地介绍了Spring的体系结构和相关知识点,目的是帮助初学者快速掌握Spring,并能使用Spring进行应用程序的开发。本书最大的特色在于每章都是由浅入深,从一个简单的示例入手,让读者快速了解本章内容,然后再详细讲解本章涉及的基本原理和知识点,最后再通过一个详细的示例宋巩固所学内容。本书每一章的例子都是经过精挑细选,具有很强的针对性,力求让读者通过亲自动手做而掌握其原理和方法,从而学习尽可能多的知识。本书适用于初、中级软件开发人员,同时也可用作高校相关专业师生和社会培训班的教材。
【推荐理由】
全书共分14章,内容涵盖了Spring的基础概念、核心容器、Spring AOP、事务处理、持久层封装、Web框架、定时器、Spring和Struts、Spring和Hibernate、Spring和Ant、Spring和Junit。本书适用于初、中级软件开发人员,同时也可用作高校相关专业师生和社会培训班的教材。
3.《JavaWeb开发详解》
【内容介绍】
本书共分4部分,从XML、Servlet、JSP和应用的角度向读者展示了Java Web开发中各种技术的应用,循序渐进地引导读者快速掌握Java Web开发。
【推荐理由】
本书内容全面,涵盖了从事Java Web开发所应掌握的所有知识,在知识的讲解上本书采用理论与实践相结合的方式,从程序运行的内部机制进行分析讲解,并通过大量的实例和实验来验证并运用本书的知识。
C#读取通信达行情数据缓存文件
最近这段时间对股票有了兴趣,当然也没有少亏,现在明白玩股票的,说不亏赚钱什么都是骗人的,钱能不能赚,当然是肯定的,但好不好赚,就不一定了.
作为数据时代的码农,对一个交易系统进行研究的动力可是不小的,这不,今天就从最简单的开始吧.
行情数据保存在.day文件中,采用的是结构体保存的方式.
public struct StockInfo { public int date; public int open; public int high; public int low; public int close; public int amount; public int vol; public int reservation; }
由上面的结构体可以看出其基本的数据结构还是比较简单的.
日期,开盘价,最高价,最低价,收盘价,成交量,成交额,还有最后一个是保留位.
了解了结构体的数据结构以后,再读取就相对比较简单了,简单来讲,就是把二进制中的数据反序列化出来.就可以了.接下来我们来一步一步的分析这个过程.
1. 首先是获取读取的文件内容.
这个相对比较简单,C#有标准的二进制读取方法.
public static byte[] ReadInfo(string file, int read) { FileStream fs = new FileStream(file, FileMode.Open); FileInfo fileInfo = new FileInfo(file); BinaryReader br = new BinaryReader(fs); byte[] bt = br.ReadBytes(Convert.ToInt32(fileInfo.Length)); br.Close(); fs.Close(); return bt; }
上面的代码应该不需要解释,就是从文件开始读到最后一行呗.相当简单的事情.
2. 接下来,就是按照结构体的大小解析读到了byte[]数组.
这个解析就比较简单,用到了几个本地操作的函数.我们先来看一下代码
private static StockInfo Byte2Struct(byte[] arr) { //获取结构体的大小 int structSize = Marshal.SizeOf(typeof(StockInfo)); //分配结构体大小的空间 IntPtr ptemPtr = Marshal.AllocHGlobal(structSize); //将byte数组拷贝到分配好的内存空间 Marshal.Copy(arr, 0, ptemPtr, structSize); //将内存空间转换为目标结构体 StockInfo stock = (StockInfo)Marshal.PtrToStructure(ptemPtr, typeof(StockInfo)); //施放内存空间 Marshal.FreeHGlobal(ptemPtr); return stock; }
上面最重要的就是通过sizeof获取结构体的二制保存的字节的大小.
然后通过互操作类分配内存空间,把数组拷贝到内存,再把内存中的数据写入到结构体.相对来说,没有什么复杂的事情.
3. 用主函数将这些操作链接起来.简单来讲,就是读取文件,然后获取记录的条数.用循环读取每一条记录.
byte[] bt = ReadInfo(filename, 288); int structSize = Marshal.SizeOf(typeof(StockInfo)); int num = bt.Length / structSize; for (int i = 0; i < num; i++) { byte[] temp = new byte[structSize]; Array.Copy(bt, i * structSize, temp, 0, structSize); StockInfo stock = new StockInfo(); stock = Byte2Struct(temp); Console.Out.WriteLine(stock.date + " " + stock.open / 100.00 + " " + stock.close / 100.00 + " " + stock.high / 100.00 + " " + stock.low / 100.00 + " " + stock.amount + " " + stock.vol + " " + stock.reservation); }
这样子来看,其实读取二进制也不复杂,只要知道原始结构体,读取还是比较简单的.
每日行情读取完了,就可以进行第二步了,就是制定自己的操作策略,然后制定程序化交易的模型了