扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
试试吧,
我们提供的服务有:成都做网站、成都网站建设、微信公众号开发、网站优化、网站认证、鞍山ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的鞍山网站制作公司
在JSP中访问Oracle ,SqlServer ,DB2, Informix ,Access 数据库
2007-1-13
在JSP中访问Oracle ,SqlServer ,DB2, Informix ,Access 数据库
现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发。在练习这些代码的时候,你一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建 create table test(test1 varchar(20),test2 varchar(20),然后向这个表写入一条测试纪录,那么现在开始我们的jsp和数据库之旅吧。
一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp连接DB2数据库
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp连接Informix数据库
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp连接Access数据库
<%@page import="java.sql.*"
import ="java.util.*"
import ="java.io.*"
import="java.text.*"
contentType="text/html; charset=gb2312"
buffer="20kb"
%><%! int all,i,m_count;
String odbcQuery;
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String username,title,content,work,email,url,time,date;
String datetime;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch (ClassNotFoundException e)
{ out.print ("驱动程序不存在");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:db1");
odbcstmt = odbcconn.createStatement();
odbcQuery="Select * From book where datetime>2001-4-26 Order By datetime DESC";
odbcrs=odbcstmt.executeQuery(odbcQuery);
int i=0;
while (i<130) odbcrs.next();
while (odbcrs.next())
{
//*/////////////////////////显示数据库的内容用于调试程序是用//
int ii;
try{
try{
for (ii=1;;ii++)
out.print ("<br>Cloumn "+ii+" is: "+odbcrs.getString(ii));
}catch (NullPointerException e) {
out.print ("有空的指针");
}
}catch (SQLException e){
}
}
odbcrs.close();
odbcstmt.close();
odbcconn.close();
}catch (SQLException e)
{ out.print (e);
}
%>
查看(24) 评论(0)
Hibernate快速入门
2006-11-10
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。这容易让人产生Hibernate复杂难懂的误解,特别是打击了初学者的积极性。
在这篇文章将不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。本文的目的是演示一下Hibernate的安装过程以及最基本的功能,从而给初学者一个低得不能再低的入门门槛。
下载文件
你需要Java SDK、 Hibernate包、Ant包、和JDBC Driver。
1、Hibernate包下载地址:
... t_by=datesort=desc
2、Ant包下载地址:
3、JDBC Driver要根据你用的database来定,一般database官方网站上都会有。Hibernate支持常用的database,比如 MySQL, Oracle, PostgreSQL, 和MS-SQL Server。这些数据库都有JDBC Driver:
Oracle JDBC Driver下载地址(下载前必须同意Oracle协议书)
... tdocs/jdbc9201.html
MySQL JDBC Driver下载地址
PostgreSQL JDBC Driver下载地址
MS-SQL Server JDBC Driver下载地址
... bf71displaylang=en
4、将Hibernate包和Ant包分别解压至c:dev下(此目录不重要,你可以换其它任何目录)。
配置环境
1、你需要添加一个新的环境变量: ANT_HOME,让它指向c:dev的ANT包所在目录并在PATH环境变量里添加%ANT_HOME%in。
2、你需要添加一个新的环境变量: JAVA_HOME,让它指向你的j2sdk根目录。并在PATH环境变量里添加%JAVA_HOME%in。
3、创建一个项目ā?目录,比如c:workspaceMy1stHibernate。
在项目目录下,另外创建三个目录: src, classes, lib。
在lib目录下,创建两个目录: hibernate和db。
这样你有了如下的文件结构:
c:workspaceMy1stHibernate
c:workspaceMy1stHibernatesrc
c:workspaceMy1stHibernateclasses
c:workspaceMy1stHibernatelib
c:workspaceMy1stHibernatelibhibernate
c:workspaceMy1stHibernatelibdb
4、将c:dev的Hibernate包所在目录hibernate2.jar文件copy到c:workspaceMy1stHibernatelibhibernate下。
将c:dev的Hibernate包所在目录lib下的所有文件同样copy到c:workspaceMy1stHibernatelibhibernate下。
将你的JDBC Driver文件(一般是一个jar文件)copy到c:workspaceMy1stHibernatelibdb下。
创建数据库
1、用你最喜爱的database软件,创建一个hibernate_test的数据库。
2、在此数据库下,新建一个table名为CUSTOMER
CREATE TABLE CUSTOMER
(
CID INTEGER NOT NULL PRIMARY KEY, USERNAME VARCHAR(12) NOT NULL, PASSWORD VARCHAR(12)
);
编写Java文件
public class Customer {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public String getPassword() {
return password;
}
public String getUsername() {
return username;
}
public void setId(int id) {
this.id = id;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
将此类存为c:workspaceMy1stHibernatesrcCustomer.java文件。
编写Test类
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class Test {
public static void main(String[] args) {
try {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
for (int i = 0; i 200; i++) {
Customer customer = new Customer();
custoā?mer.setUsername("customer" + i);
customer.setPassword("customer");
session.save(customer);
}
tx.commit();
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
}
}
将此类存为c:workspaceMy1stHibernatesrcTest.java文件。
创建Hibernate映射文件
因为这里只有一个Class --- Customer 和一个Table --- CUSTOMER,你只需要建立一个映射文件--- Customer.hbm.xml,来对应Customer类和CUSTOMER表之间的关系。
xml version="1.0"?
DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
""
ibernate-mapping
lass name="Customer" table="CUSTOMER"
d name="id" column="CID"
enerator class="increment" /
id
roperty name="username" column="USERNAME" /
roperty name="password" column="PASSWORD" /
class
hibernate-mapping
把此文件存为c:workspaceMy1stHibernatesrcCustomer.hbm.xml,和Customer.java放在同一目录下。
编写Ant build.xml文件
你不一定要知道这个build.xml的细节,其实Ant也不是Hibernate所必须的。这里用Ant是为了简化一些任务,比如: 编译、copy、运行,等。
xml version="1.0" ?
roject name="My1stHibernate" default="build" basedir="."
roperty name="base.dir" value="." /
roperty name="src.dir" value="src" /
roperty name="lib.dir" value="lib" /
roperty name="build.dir" value="classes" /
ath id="myclasspath"
ileset dir="${lib.dir}"
nclude name="**/*.jar" /
fileset
athelement location="${build.dir}" /
path
arget name="init"
kdir dir="${build.dir}" /
target
arget name="build" depends="init" description="compile the source files"
avac classpathref="myclasspath" srcdir="${src.dir}" destdir="${build.dir}" /
opy todir="${build.dir}"
ileset dir="${src.dir}"
ā?xclude name="**/*.java"/
fileset
copy
target
arget name="run" depends="build"
ava classpathref="myclasspath" classname="Test" fork="true" /
target
arget name="clean"
elete includeEmptyDirs="true"
ileset dir="${build.dir}" /
delete
target
project
配置Hibernate描述文件
Hibernate描述文件可以是一个properties或xml 文件,其中最重要的是定义数据库的连接。我这里列出的是一个XML格式的hibernate.cfg.xml描述文件。
xml version="1.0" encoding="utf-8" ?
DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
""
ibernate-configuration
ession-factory name="java:/hibernate/HibernateFactory"
roperty name="show_sql"rueproperty
roperty name="connection.driver_class"
oracle.jdbc.driver.OracleDriver -- 这里是Oracle 9i的JDBC driver class名 --
property
roperty name="connection.url"
jdbc:oracle:oci8:@hibernate_test -- 这里是Oracle的hibernate_test数据库URL --
property
roperty name="connection.username"
你的数据库用户名
property
roperty name="connection.password"
你的数据库密码
property
roperty name="dialect"
net.sf.hibernate.dialect.Oracle9Dialect -- 这里是Oracle 9i的Dialect --
property
apping resource="Customer.hbm.xml" /-- 指定Customer的映射文件 --
session-factory
hibernate-configuration
如果你用的不是Oracle 9i,可到C:dev的Hibernate包所在目录srchibernate.properties文件里找到你的数据库,然后替换以上相对应的值。
开始运行
到c:workspaceMy1stHibernate下,运行ant run。如果你严格依照以上步骤,应该看到
run:
[java] log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
[java] log4j:WARN Please initialize the log4j system properly.
[java] Hibernate: insert into CUSTOMER (USERNAME, PASSWORD, CID) values (?, ?, ?)
BUILD SUCCESSFUL
到你的hibernate_test数据库看一下,在CUSTMOR表里新添了200条记录,但你没有写任何JDBC code。
以后如果你要更换数据库,只需要改变hibernate.cfg.xml描述文件里相应的值即可。
查看(89) 评论(4)
掌握 Ajax, Ajax 简介
2006-11-10
Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本文的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象。
五年前,如果不知道 XML,您就是一只无人重视的丑小鸭。十八个月前,Ruby 成了关注的中心,不知道 Ruby 的程序员只能坐冷板凳了。今天,如果想跟上最新的技术时尚,那您的目标就是 Ajax。
但是,Ajax 不仅仅 是一种时尚,它是一种构建网站的强大方法,而且不像学习一种全新的语言那样困难。
但在详细探讨 Ajax 是什么之前,先让我们花几分钟了解 Ajax 做 什么。目前,编写应用程序时有两种基本的选择:
桌面应用程序
Web 应用程序
两者是类似的,桌面应用程序通常以 CD 为介质(有时候可从网站下载)并完全安装到您的计算机上。桌面应用程序可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。Web 应用程序运行在某处的 Web 服务器上 —— 毫不奇怪,要通过 Web 浏览器访问这种应用程序。
不过,比这些应用程序的运行代码放在何处更重要的是,应用程序如何运转以及如何与其进行交互。桌面应用程序一般很快(就在您的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作系统有关)和非凡的动态性。可以单击、选择、输入、打开菜单和子菜单、到处巡游,基本上不需要等待。
另一方面,Web 应用程序是最新的潮流,它们提供了在桌面上不能实现的服务(比如 Amazon.com 和 eBay)。但是,伴随着 Web 的强大而出现的是等待,等待服务器响应,等待屏幕刷新,等待请求返回和生成新的页面。
显然这样说过于简略了,但基本的概念就是如此。您可能已经猜到,Ajax 尝试建立桌面应用程序的功能和交互性,与不断更新的 Web 应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和漂亮的控件,不过是在 Web 应用程序中。
还等什么呢?我们来看看 Ajax 如何将笨拙的 Web 界面转化成能迅速响应的 Ajax 应用程序吧。
老技术,新技巧
在谈到 Ajax 时,实际上涉及到多种技术,要灵活地运用它必须深入了解这些不同的技术(本系列的头几篇文章将分别讨论这些技术)。好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很容易学习,并不像完整的编程语言(如 Java 或 Ruby)那样困难。
Ajax 的定义
顺便说一下,Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。这个短语是 Adaptive Path 的 Jesse James Garrett 发明的(请参阅 参考资料),按照 Jesse 的解释,这不是 个首字母缩写词。
下面是 Ajax 应用程序所用到的基本技术:
HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。
JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
DHTML 或 Dynamic HTML,用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记 HTML。
文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。
我们来进一步分析这些技术的职责。以后的文章中我将深入讨论这些技术,目前只要熟悉这些组件和技术就可以了。对这些代码越熟悉,就越容易从对这些技术的零散了解转变到真正把握这些技术(同时也真正打开了 Web 应用程序开发的大门)。
XMLHttpRequest 对象
要了解的一个对象可能对您来说也是最陌生的,即 XMLHttpRequest。这是一个 JavaScript 对象,创建该对象很简单,如清单 1 所示。
清单 1. 创建新的 XMLHttpRequest 对象
script language="javascript" type="text/javascript"
var xmlHttp = new XMLHttpRequest();
/script
下一期文章中将进一步讨论这个对象,现在要知道这是处理所有服务器通信的对象。继续阅读之前,先停下来想一想:通过 XMLHttpRequest 对象与服务器进行对话的是 JavaScript 技术。这不是一般的应用程序流,这恰恰是 Ajax 的强大功能的来源。
在一般的 Web 应用程序中,用户填写表单字段并单击 Submit 按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是 PHP 或 Java,也可能是 CGI 进程或者类似的东西),脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的 HTML,也可能是确认页面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和返回新表单时用户必须等待。屏幕变成一片空白,等到服务器返回数据后再重新绘制。这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。
Ajax 基本上就是把 JavaScript 技术和 XMLHttpRequest 对象放在 Web 表单和服务器之间。当用户填写表单时,数据发送给一些 JavaScript 代码而不是 直接发送给服务器。相反,JavaScript 代码捕获表单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,JavaScript 代码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说 JavaScript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。
然后,服务器将数据返回 JavaScript 代码(仍然在 Web 表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就是 XMLHttpRequest 的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。
加入一些 JavaScript
得到 XMLHttpRequest 的句柄后,其他的 JavaScript 代码就非常简单了。事实上,我们将使用 JavaScript 代码完成非常基本的任务:
获取表单数据:JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。
修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。
解析 HTML 和 XML:使用 JavaScript 代码操纵 DOM(请参阅 下一节),处理 HTML 表单服务器返回的 XML 数据的结构。
对于前两点,需要非常熟悉 getElementById() 方法,如 清单 2 所示。
清单 2. 用 JavaScript 代码捕获和设置字段值
// Get the value of the "phone" field and stuff it in a variable called phone
var phone = document.getElementById("phone").value;
// Set some values on a form using an array called response
document.getElementById("order").value = response[0];
document.getElementById("address").value = response[1];
这里没有特别需要注意的地方,真是好极了!您应该认识到这里并没有非常复杂的东西。只要掌握了 XMLHttpRequest,Ajax 应用程序的其他部分就是如 清单 2 所示的简单 JavaScript 代码了,混合有少量的 HTML。同时,还要用一点儿 DOM,我们就来看看吧。
以 DOM 结束
最后还有 DOM,即文档对象模型。可能对有些读者来说 DOM 有点儿令人生畏,HTML 设计者很少使用它,即使 JavaScript 程序员也不大用到它,除非要完成某项高端编程任务。大量使用 DOM 的是 复杂的 Java 和 C/C++ 程序,这可能就是 DOM 被认为难以学习的原因。
幸运的是,在 JavaScript 技术中使用 DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使用 DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM,仍然能深入地探讨 Ajax,这也是我准备采用的方法。以后的文章将再次讨论 DOM,现在只要知道可能需要 DOM 就可以了。当需要在 JavaScript 代码和服务器之间传递 XML 和改变 HTML 表单的时候,我们再深入研究 DOM。没有它也能做一些有趣的工作,因此现在就把 DOM 放到一边吧。
回页首
获取 Request 对象
有了上面的基础知识后,我们来看看一些具体的例子。XMLHttpRequest 是 Ajax 应用程序的核心,而且对很多读者来说可能还比较陌生,我们就从这里开始吧。从 清单 1 可以看出,创建和使用这个对象非常简单,不是吗?等一等。
还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest 成了这场战争的牺牲品之一。因此获得 XMLHttpRequest 对象可能需要采用不同的方法。下面我将详细地进行解释。
使用 Micr
我是如何从物理学转行到数据科学领域
很多人问我是如果从物理学转行到数据科学,本文讲述了关于我为什么决定成为一名数据科学家,以及我是如何追求并实现目标的。希望能够最终鼓励更多的人追求自己的梦想。让我们开始吧!
CERN 暑期项目
2017年CERN暑期项目
CERN(欧洲核子研究组织)暑期项目为物理、计算机和工程专业的本科生提供了千载难逢的机会,让他们前往瑞士日内瓦,与顶尖科学家一起参加研究项目。
2017年6月,我非常幸运地被选中参加这个项目。粒子物理学是我的研究方向,能够参加CERN的研究项目让我欣喜不已。在为期2个月的项目期间,针对CMS(紧凑μ子线圈)实验,我通过世界级LHC(大型强子对撞机)计算网格和云计算进行了相关分析和模拟。
CMS(紧凑μ子线圈)
此外,暑期项目还包含了一系列围绕粒子物理和计算领域的讲座、研讨会。
在此期间,通过参加讲座、研讨会以及项目,我开始接触到机器学习和大数据分析。令我惊讶的是,机器学习技术能够处理大量的数据,并精确的对各种微观粒子进行分类和检测。接着我毫不犹豫地投入了对机器学习和云计算的探究与学习。
谁知道这次经历会成为我人生中的转折点,我打算投身数据分析。然而此时我对数据科学的定义仍比较模糊。
数据科学领域初探
当我一结束暑期项目回到新加坡,我就对解数据科学进行了一些探究,令我惊讶的是,这个领域并没有明确的定义。但总的来说,在我看来,数据科学涵盖了编程、数学、统计知识以及一定专业知识。
尽管如此,我还是惊讶于数据是如何被用来为公司得出分析见解,并驱动商业价值。从理解业务问题,到收集和进行数据可视化,直到构建原型开发阶段,进行微调,并将模型部署到实际应用程序中,在这些过程中我发现了通过使用数据解决复杂问题、完成挑战的满足感。
“没有数据,你只是一个空有想法的人”。
—— W. Edwards Deming
我的出发点—数据可视化
Tableau Dashboard
2017年8月,作为进入数据科学领域的第一步,我参加了由Tableau和IMDA(Infocomm Media Development Authority)共同组织的NIC Face-Off 数据竞赛,当中我首次接触到数据可视化。
当中我有机会使用Tableau Public对各种开放数据源进行可视化,这些数据调查了东南亚雾霾的起源,并提供了可操作性的的见解。
第一份数据分析兼职实习
在同月,我偶然发现了一个机会成为了mobilityX的一名数据分析实习生,这是一家由SMRT资助的初创公司。考虑到可读性和广泛社区的支持,我使用Python进行编程。
其实在我大一开始学习编程时,我想过放弃。为了运行一个简单的for循环,我可能要花费好几天甚至几周。而且我常常会感觉自己没有天赋。
直到大三我和教授开始一项研究项目,我才开始对编程产生兴趣。我开始使用Python进行构建,并喜欢上了这个编程语言。
我开始不在自我怀疑,而是采用以下的步骤学习编程:
1. 理解编程的基本逻辑;
2. 选择一种编程语言并学习如何使用(语法等);
3. 练习,练习,再练习;
4. 重复步骤1-3 。
实习一直持续到2018年3月,期间我的收获颇多。我学会使用PostgreSQL和Python进行数据清理和操作、web抓取以及数据提取。
数据科学全职实习
之前经历进一步强化了我对数据科学的喜爱。之后我计划了自己的学习时间表,并在2017年12月毕业后,开始了在Quantum Inventions的数据科学全职实习。
看到这里你可能会问 ,为什么我选择去实习而不是一份数据科学的工作?那就是在申请全职工作之前,能够通过处理实际的数据,获得更多的技术知识,并从头开始体验数据科学的整个流程。
学习资源
以下总结了我的学习过程,当中我接受了很多人的帮助,并充分利用了大量的在线资源。
1. 推荐书籍
我读的第一本数据科学的书是《统计学习导论:基于R应用》(An Introduction to Statistical Learning?—?with Applications in R)。这本书对于初学者是非常不错的选择,当中着重统计建模和机器学习的基本概念,并提供详细而直观的解释。如果你很擅长数学,那么你肯定会喜欢这本书:《统计学习基础》(The Elements of Statistical Learning)。
还有一些相关书籍也是不错的选择,比如Sebastian Raschka的《面向初学者的机器学习》(Machine Learning for Absolute Beginners),《Python 和机器学习》(Python Machine Learning);以及Jake VanderPlas的《Python数据科学手册》( Python Data Science Handbook)。
2. 在线课程
Coursera
我推荐Coursera联合创始人吴恩达的《机器学习》课程。他能够把复杂的概念分解成更简单内容。该课程为期11周,主要围绕监督式学习、无监督学习以及机器学习的实际应用。当构建机器学习模型时,我仍然会参考该课程讲义,用来解决欠拟合或过度拟合的问题。
Udemy
Jose Portilla的《在数据科学和机器学习中使用Python》(Python for Data Science and Machine Learning Bootcamp)是不错的选择。该课程从Python基础知识开始,逐步指导你如何使用scikit-learn和TensorFlow实现各种机器学习和深度学习代码。本课程详细介绍了Python中各种库,用来实现机器学习模型。
此外,我强烈推荐Kirill Eremenko和Hadelin de Ponteves的课程《深度学习A-Z:人工神经网络》( Deep Learning A-Z?: Hands-On Artificial Neural Networks )。通过该课程,我第一次接触到深度学习。课程主要通过实际操作的编程教程,把握监督和无监督深度学习。
Lynda
我推荐Lillian Pierson的课程《在数据科学基础训练中使用Python》( Python for Data Science Essential Training 。该课程以统计分析为基础,围绕数据管理和数据可视化。
3. LinkedIn
LinkedIn是与数据科学社区有紧密联系的的强大平台。人们愿意在上面分享他们的经验、想法和知识,从而帮助他人。在LinkedIn上,我学习到了很多,无论是技术知识还是职业咨询等。
4. 其他资源
许多数据科学领域的初学者经常会被大量的资源所淹没。除了以上资源平台以外,还有Towards Data Science、Quora、DZone、KDnuggets、Analytics Vidhya、DataTau、fast.ai 等都是不错的选择。
建立作品集
个人作品集能够展示你的经验和能力,特别是当你没有数据科学方面的博士学位时。
由于我只有物理学的学士学位,我没有计算机科学相关学位,在大学的前三年中我也没有任何相关的数据科学作品。建立个人作品集是很重要的,因为公司需要知道你学了些什么,如何能过为公司业务贡献价值。这也是我决定实习和学习在线课程的原因。
不久之前,我和朋友一起参加由Shopee和工程与科技协会(IET)组织的Kaggle 机器学习挑战赛。这是我第一次参加Kaggle比赛,我学习了如何使用卷积神经网络(CNN)和迁移学习进行图像识别。
结语
我分享了我进入数据科学行业的一些情况,希望我的经历能够让你觉得数据科学其实很有趣,并不那么吓人。直到我接触到数据科学,我才愈发感受到什么是学无止境。我希望本文能够激励你去挑战自己,实现自己的梦想。
;search=pageNum=1
为检验前 4-6 章的听课效果,OceanBase 开源团队在 OBCP 考题中特选出一些前 4-6 期教程的代表性题目作为测试。
“教程观看地址”:
“视频回放合集”:
1.可以针对某一台OBServer或者某一个租户,手动触发转储命令
正确 错误
2.OBProxy 需要从 OBServer 获取 location cache 来路由
正确 错误
3.OceanBase应用日志级别分为ERROR、WARN、INFO三个级别
正确 错误
1.客户的OceanBase集群有三个zone,分别为z1,z2,z3。在正常情况下,客户的读写流量只访问z1的数据库节点;在z1整体出现故障的场景下,读写流量需要均分到z2和z3。为满足上述业务需求,如下primary zone设置正确的是?
A(z1,z2,z3) B(z1;z2;z3) C(z1;z2,z3) D(z1,z2;z3)
2.以下关于OceanBase各类副本,说法错误的是?
A 全能型副本和日志型副本都参与投票
B 全能型副本和日志型副本都有SSTable
C "只读型副本有MemTable和SSTable"
D 只读型副本包含完整的日志
3.集群合并卡住后,哪种操作的风险最小?
A 直接重启observer进程
B stop server
C 先stop server,后重启observer进程
D 先suspend merge,后重启observer进程
4.OceanBase的分布式事务相比于传统的两阶段提交做了一些改进和优化,关于OceanBase的分布式事务,下列说法正确的是?
A 包括一个阶段:提交阶段(commit)
B 包括两个阶段:准备阶段(prepare),提交阶段(commit)
C 包括两个阶段:提交阶段(commit),异步清理阶段(clear)
D 包括三个阶段:准备阶段(prepare),提交阶段(commit),异步清理阶段(clear)
三、多选题
1.OceanBase有哪几种合并方式
A 定时合并
B 分层合并
C 手动合并
D 临界合并
E 触发合并
2.OceanBase全局一致性方案,说法正确的是?
A 依赖于原子钟
B 无需依赖特殊硬件
C 依赖root service
D 是一个高可用的集中式服务
E 能够提供全局一致的版本号
3.关于OBProxy 的部署方式,下列说法正确的是
A 集中部署
B 客户端部署
C 单点部署
D 随时使用随时启动
4.有关OceanBase mysql错误码的表述正确的是?
A 如果一个错误码的值大于4000,表明它是OB特有的错误码
B 如果在4000以内,表示它是MySQL兼容错误
C 如果一个错误码的值大于等于5000,表明它是OB特有的错误码
D 如果在5000以内,表示它是MySQL兼容错误
5.OceanBase支持的索引类型包括?
A 局部索引
B Hash索引
C 唯一索引
D Bitmap索引
E 全局索引
6.创建表时,可以使用一些哪些标记 ?
A 字母
B 数字
C #
D _
7.OceanBase中支持的2种租户模式为?
A Oracle
B SQL Server
C MySQL
D PostGreSQL
学习Linux步骤:
1、先了解了解基础吧,找一本薄一点的,浅一点的书,了解一下什么是linux。有个基本了解即可。不建议马上看《鸟哥的Linux私房菜》,这本书很不错,如果你了解linux基础之后再看,对你可以说是不受益匪浅都不行。没基础看《鸟哥的Linux私房菜》比较痛苦,内容很多。
2、了解之后,在自己电脑上弄个虚拟机,装上linux系统(redhat或ubuntu都行)。专攻《鸟哥的Linux私房菜》。当你把这本书攻下来时,才知道原来命令行并不可怕,自己打着打着就很长啦。
学linux最主要靠实践,不实践,只看书对你没好处的哦。自己在虚拟机上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找资料弄懂,弄懂之后再实践,这才会有收获。
《SQL语言与数据库操作技术大全》 本书以应用广泛的SQL Server 2005数据库为依据,按照数据库操作的一般顺序,用16章的篇幅,以基础介绍、数据库及表的创建、数据查询、数据操纵、数据控制、事务控制和数据库管理的顺序,由浅到深地介绍Transact-SQL语言。 《24小时sql 2005 教程》(SQL Server 2005 Express in 24 Hours) 简介:写的清楚,而且实用。本书的作者是一个专家级的人物。他清楚详细的介绍了基本概念。 《SQL Server 2005盛宴系列课程》[ISO] 《零基础学SQL Server 2005 教案PPT/随书光盘》
看你学习oracle用来做什么了 数据库管理方面:Oracle.9i数据库管理员指南
sql方面:oracle+SQL语法大全 程序设计相关的:Oracle专家高级编程 这三本书就差不多了 你去oracle网站上有oracle的白皮书,入门够用了
学习C++有那些步骤:
1。学习C++基本语法,参考书籍《C++程序设计》》钱能著,或《C++程序设计教程》DEITEL著,我看的是后者;
2。学习数据结构,参考书籍《数据结构C++语言描述——应用标准模板库(STL)》William Ford著; 3。学习STL,参考书籍《C++标准程序库》候捷译;
4。学习模板,参考书籍《泛型编程与STL》候捷译;
5。深入STL内部,直到能自己写出STL的源码,参考书籍《STL源码剖析》候捷译;
6。学习I/O方面的知识,参考书籍《Standard C++ IOStream and Locales》;
7。重温整个C++体系,参考书籍《C++ PRIMER》和《the c++ programming language》;
8。学习前人的技巧和方法,参考书籍〈effective c++,,;
9。再往上走,从宏观上把握C++程序设计体系,参考书籍设计模式,《深入探索C++对象模型》,大规模C++程序设计;
接下来就可以分2条路走了:
一。偏理论的道路,考研,注意,不是考计算机系,是考数学系,学习集合论,图论等知识,有一套书叫〈计算机程序设计艺术〉一至三卷,等你把他们都看完了,理解透了,就可以直接去微软投简历了。
二。偏应用的道路,学习windows编程,学习MFC,COM,ATL,以及整个.NET体系。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流