試試吧,
我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鞍山ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鞍山網(wǎng)站制作公司
在JSP中訪問Oracle ,SqlServer ,DB2, Informix ,Access 數(shù)據(jù)庫(kù)
2007-1-13
在JSP中訪問Oracle ,SqlServer ,DB2, Informix ,Access 數(shù)據(jù)庫(kù)
現(xiàn)在有好多初學(xué)jsp的網(wǎng)友經(jīng)常會(huì)問數(shù)據(jù)庫(kù)怎么連接啊,怎么老出錯(cuò)?。克晕壹械脑谶@寫篇文章供大家參考,其實(shí)這種把數(shù)據(jù)庫(kù)邏輯全部放在jsp里未必是好的做法,但是有利于初學(xué)者學(xué)習(xí),所以我就這樣做了,當(dāng)大家學(xué)到一定程度的時(shí)候,可以考慮用MVC的模式開發(fā)。在練習(xí)這些代碼的時(shí)候,你一定將jdbc的驅(qū)動(dòng)程序放到服務(wù)器的類路徑里,然后要在數(shù)據(jù)庫(kù)里建一個(gè)表test,有兩個(gè)字段比如為test1,test2,可以用下面SQL建 create table test(test1 varchar(20),test2 varchar(20),然后向這個(gè)表寫入一條測(cè)試紀(jì)錄,那么現(xiàn)在開始我們的jsp和數(shù)據(jù)庫(kù)之旅吧。
一、jsp連接Oracle8/8i/9i數(shù)據(jù)庫(kù)(用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為你的數(shù)據(jù)庫(kù)的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()) {%>
您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
<%}%>
<%out.print("數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
二、jsp連接Sql Server7.0/2000數(shù)據(jù)庫(kù)
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為你的數(shù)據(jù)庫(kù)的
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()) {%>
您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
<%}%>
<%out.print("數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
三、jsp連接DB2數(shù)據(jù)庫(kù)
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為你的數(shù)據(jù)庫(kù)名
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()) {%>
您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
<%}%>
<%out.print("數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
四、jsp連接Informix數(shù)據(jù)庫(kù)
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為你的數(shù)據(jù)庫(kù)名
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()) {%>
您的第一個(gè)字段內(nèi)容為:<%=rs.getString(1)%>
您的第二個(gè)字段內(nèi)容為:<%=rs.getString(2)%>
<%}%>
<%out.print("數(shù)據(jù)庫(kù)操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
五、jsp連接Access數(shù)據(jù)庫(kù)
<%@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 ("驅(qū)動(dòng)程序不存在");
}
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())
{
//*/////////////////////////顯示數(shù)據(jù)庫(kù)的內(nèi)容用于調(diào)試程序是用//
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) 評(píng)論(0)
Hibernate快速入門
2006-11-10
其實(shí)Hibernate本身是個(gè)獨(dú)立的框架,它不需要任何web server或application server的支持。然而,大多數(shù)的Hibernate入門介紹都加入了很多非Hibernate的東西,比如: Tomcat, Eclipse, Log4J,Struts, XDoclet, 甚至JBoss。這容易讓人產(chǎn)生Hibernate復(fù)雜難懂的誤解,特別是打擊了初學(xué)者的積極性。
在這篇文章將不涉及Eclipse, log4j, Struts, Tomcat, XDoclet,和JBoss。本文的目的是演示一下Hibernate的安裝過程以及最基本的功能,從而給初學(xué)者一個(gè)低得不能再低的入門門檻。
下載文件
你需要Java SDK、 Hibernate包、Ant包、和JDBC Driver。
1、Hibernate包下載地址:
... t_by=datesort=desc
2、Ant包下載地址:
3、JDBC Driver要根據(jù)你用的database來定,一般database官方網(wǎng)站上都會(huì)有。Hibernate支持常用的database,比如 MySQL, Oracle, PostgreSQL, 和MS-SQL Server。這些數(shù)據(jù)庫(kù)都有JDBC Driver:
Oracle JDBC Driver下載地址(下載前必須同意Oracle協(xié)議書)
... tdocs/jdbc9201.html
MySQL JDBC Driver下載地址
PostgreSQL JDBC Driver下載地址
MS-SQL Server JDBC Driver下載地址
... bf71displaylang=en
4、將Hibernate包和Ant包分別解壓至c:dev下(此目錄不重要,你可以換其它任何目錄)。
配置環(huán)境
1、你需要添加一個(gè)新的環(huán)境變量: ANT_HOME,讓它指向c:dev的ANT包所在目錄并在PATH環(huán)境變量里添加%ANT_HOME%in。
2、你需要添加一個(gè)新的環(huán)境變量: JAVA_HOME,讓它指向你的j2sdk根目錄。并在PATH環(huán)境變量里添加%JAVA_HOME%in。
3、創(chuàng)建一個(gè)項(xiàng)目ā?目錄,比如c:workspaceMy1stHibernate。
在項(xiàng)目目錄下,另外創(chuàng)建三個(gè)目錄: src, classes, lib。
在lib目錄下,創(chuàng)建兩個(gè)目錄: hibernate和db。
這樣你有了如下的文件結(jié)構(gòu):
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文件(一般是一個(gè)jar文件)copy到c:workspaceMy1stHibernatelibdb下。
創(chuàng)建數(shù)據(jù)庫(kù)
1、用你最喜愛的database軟件,創(chuàng)建一個(gè)hibernate_test的數(shù)據(jù)庫(kù)。
2、在此數(shù)據(jù)庫(kù)下,新建一個(gè)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文件。
創(chuàng)建Hibernate映射文件
因?yàn)檫@里只有一個(gè)Class --- Customer 和一個(gè)Table --- CUSTOMER,你只需要建立一個(gè)映射文件--- Customer.hbm.xml,來對(duì)應(yīng)Customer類和CUSTOMER表之間的關(guān)系。
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文件
你不一定要知道這個(gè)build.xml的細(xì)節(jié),其實(shí)Ant也不是Hibernate所必須的。這里用Ant是為了簡(jiǎn)化一些任務(wù),比如: 編譯、copy、運(yùn)行,等。
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描述文件可以是一個(gè)properties或xml 文件,其中最重要的是定義數(shù)據(jù)庫(kù)的連接。我這里列出的是一個(gè)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數(shù)據(jù)庫(kù)URL --
property
roperty name="connection.username"
你的數(shù)據(jù)庫(kù)用戶名
property
roperty name="connection.password"
你的數(shù)據(jù)庫(kù)密碼
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文件里找到你的數(shù)據(jù)庫(kù),然后替換以上相對(duì)應(yīng)的值。
開始運(yùn)行
到c:workspaceMy1stHibernate下,運(yùn)行ant run。如果你嚴(yán)格依照以上步驟,應(yīng)該看到
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數(shù)據(jù)庫(kù)看一下,在CUSTMOR表里新添了200條記錄,但你沒有寫任何JDBC code。
以后如果你要更換數(shù)據(jù)庫(kù),只需要改變hibernate.cfg.xml描述文件里相應(yīng)的值即可。
查看(89) 評(píng)論(4)
掌握 Ajax, Ajax 簡(jiǎn)介
2006-11-10
Ajax 由 HTML、JavaScript? 技術(shù)、DHTML 和 DOM 組成,這一杰出的方法可以將笨拙的 Web 界面轉(zhuǎn)化成交互性的 Ajax 應(yīng)用程序。本文的作者是一位 Ajax 專家,他演示了這些技術(shù)如何協(xié)同工作 —— 從總體概述到細(xì)節(jié)的討論 —— 使高效的 Web 開發(fā)成為現(xiàn)實(shí)。他還揭開了 Ajax 核心概念的神秘面紗,包括 XMLHttpRequest 對(duì)象。
五年前,如果不知道 XML,您就是一只無人重視的丑小鴨。十八個(gè)月前,Ruby 成了關(guān)注的中心,不知道 Ruby 的程序員只能坐冷板凳了。今天,如果想跟上最新的技術(shù)時(shí)尚,那您的目標(biāo)就是 Ajax。
但是,Ajax 不僅僅 是一種時(shí)尚,它是一種構(gòu)建網(wǎng)站的強(qiáng)大方法,而且不像學(xué)習(xí)一種全新的語言那樣困難。
但在詳細(xì)探討 Ajax 是什么之前,先讓我們花幾分鐘了解 Ajax 做 什么。目前,編寫應(yīng)用程序時(shí)有兩種基本的選擇:
桌面應(yīng)用程序
Web 應(yīng)用程序
兩者是類似的,桌面應(yīng)用程序通常以 CD 為介質(zhì)(有時(shí)候可從網(wǎng)站下載)并完全安裝到您的計(jì)算機(jī)上。桌面應(yīng)用程序可能使用互聯(lián)網(wǎng)下載更新,但運(yùn)行這些應(yīng)用程序的代碼在桌面計(jì)算機(jī)上。Web 應(yīng)用程序運(yùn)行在某處的 Web 服務(wù)器上 —— 毫不奇怪,要通過 Web 瀏覽器訪問這種應(yīng)用程序。
不過,比這些應(yīng)用程序的運(yùn)行代碼放在何處更重要的是,應(yīng)用程序如何運(yùn)轉(zhuǎn)以及如何與其進(jìn)行交互。桌面應(yīng)用程序一般很快(就在您的計(jì)算機(jī)上運(yùn)行,不用等待互聯(lián)網(wǎng)連接),具有漂亮的用戶界面(通常和操作系統(tǒng)有關(guān))和非凡的動(dòng)態(tài)性??梢詥螕?、選擇、輸入、打開菜單和子菜單、到處巡游,基本上不需要等待。
另一方面,Web 應(yīng)用程序是最新的潮流,它們提供了在桌面上不能實(shí)現(xiàn)的服務(wù)(比如 Amazon.com 和 eBay)。但是,伴隨著 Web 的強(qiáng)大而出現(xiàn)的是等待,等待服務(wù)器響應(yīng),等待屏幕刷新,等待請(qǐng)求返回和生成新的頁面。
顯然這樣說過于簡(jiǎn)略了,但基本的概念就是如此。您可能已經(jīng)猜到,Ajax 嘗試建立桌面應(yīng)用程序的功能和交互性,與不斷更新的 Web 應(yīng)用程序之間的橋梁??梢允褂孟褡烂鎽?yīng)用程序中常見的動(dòng)態(tài)用戶界面和漂亮的控件,不過是在 Web 應(yīng)用程序中。
還等什么呢?我們來看看 Ajax 如何將笨拙的 Web 界面轉(zhuǎn)化成能迅速響應(yīng)的 Ajax 應(yīng)用程序吧。
老技術(shù),新技巧
在談到 Ajax 時(shí),實(shí)際上涉及到多種技術(shù),要靈活地運(yùn)用它必須深入了解這些不同的技術(shù)(本系列的頭幾篇文章將分別討論這些技術(shù))。好消息是您可能已經(jīng)非常熟悉其中的大部分技術(shù),更好的是這些技術(shù)都很容易學(xué)習(xí),并不像完整的編程語言(如 Java 或 Ruby)那樣困難。
Ajax 的定義
順便說一下,Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的縮寫。這個(gè)短語是 Adaptive Path 的 Jesse James Garrett 發(fā)明的(請(qǐng)參閱 參考資料),按照 Jesse 的解釋,這不是 個(gè)首字母縮寫詞。
下面是 Ajax 應(yīng)用程序所用到的基本技術(shù):
HTML 用于建立 Web 表單并確定應(yīng)用程序其他部分使用的字段。
JavaScript 代碼是運(yùn)行 Ajax 應(yīng)用程序的核心代碼,幫助改進(jìn)與服務(wù)器應(yīng)用程序的通信。
DHTML 或 Dynamic HTML,用于動(dòng)態(tài)更新表單。我們將使用 div、span 和其他動(dòng)態(tài) HTML 元素來標(biāo)記 HTML。
文檔對(duì)象模型 DOM 用于(通過 JavaScript 代碼)處理 HTML 結(jié)構(gòu)和(某些情況下)服務(wù)器返回的 XML。
我們來進(jìn)一步分析這些技術(shù)的職責(zé)。以后的文章中我將深入討論這些技術(shù),目前只要熟悉這些組件和技術(shù)就可以了。對(duì)這些代碼越熟悉,就越容易從對(duì)這些技術(shù)的零散了解轉(zhuǎn)變到真正把握這些技術(shù)(同時(shí)也真正打開了 Web 應(yīng)用程序開發(fā)的大門)。
XMLHttpRequest 對(duì)象
要了解的一個(gè)對(duì)象可能對(duì)您來說也是最陌生的,即 XMLHttpRequest。這是一個(gè) JavaScript 對(duì)象,創(chuàng)建該對(duì)象很簡(jiǎn)單,如清單 1 所示。
清單 1. 創(chuàng)建新的 XMLHttpRequest 對(duì)象
script language="javascript" type="text/javascript"
var xmlHttp = new XMLHttpRequest();
/script
下一期文章中將進(jìn)一步討論這個(gè)對(duì)象,現(xiàn)在要知道這是處理所有服務(wù)器通信的對(duì)象。繼續(xù)閱讀之前,先停下來想一想:通過 XMLHttpRequest 對(duì)象與服務(wù)器進(jìn)行對(duì)話的是 JavaScript 技術(shù)。這不是一般的應(yīng)用程序流,這恰恰是 Ajax 的強(qiáng)大功能的來源。
在一般的 Web 應(yīng)用程序中,用戶填寫表單字段并單擊 Submit 按鈕。然后整個(gè)表單發(fā)送到服務(wù)器,服務(wù)器將它轉(zhuǎn)發(fā)給處理表單的腳本(通常是 PHP 或 Java,也可能是 CGI 進(jìn)程或者類似的東西),腳本執(zhí)行完成后再發(fā)送回全新的頁面。該頁面可能是帶有已經(jīng)填充某些數(shù)據(jù)的新表單的 HTML,也可能是確認(rèn)頁面,或者是具有根據(jù)原來表單中輸入數(shù)據(jù)選擇的某些選項(xiàng)的頁面。當(dāng)然,在服務(wù)器上的腳本或程序處理和返回新表單時(shí)用戶必須等待。屏幕變成一片空白,等到服務(wù)器返回?cái)?shù)據(jù)后再重新繪制。這就是交互性差的原因,用戶得不到立即反饋,因此感覺不同于桌面應(yīng)用程序。
Ajax 基本上就是把 JavaScript 技術(shù)和 XMLHttpRequest 對(duì)象放在 Web 表單和服務(wù)器之間。當(dāng)用戶填寫表單時(shí),數(shù)據(jù)發(fā)送給一些 JavaScript 代碼而不是 直接發(fā)送給服務(wù)器。相反,JavaScript 代碼捕獲表單數(shù)據(jù)并向服務(wù)器發(fā)送請(qǐng)求。同時(shí)用戶屏幕上的表單也不會(huì)閃爍、消失或延遲。換句話說,JavaScript 代碼在幕后發(fā)送請(qǐng)求,用戶甚至不知道請(qǐng)求的發(fā)出。更好的是,請(qǐng)求是異步發(fā)送的,就是說 JavaScript 代碼(和用戶)不用等待服務(wù)器的響應(yīng)。因此用戶可以繼續(xù)輸入數(shù)據(jù)、滾動(dòng)屏幕和使用應(yīng)用程序。
然后,服務(wù)器將數(shù)據(jù)返回 JavaScript 代碼(仍然在 Web 表單中),后者決定如何處理這些數(shù)據(jù)。它可以迅速更新表單數(shù)據(jù),讓人感覺應(yīng)用程序是立即完成的,表單沒有提交或刷新而用戶得到了新數(shù)據(jù)。JavaScript 代碼甚至可以對(duì)收到的數(shù)據(jù)執(zhí)行某種計(jì)算,再發(fā)送另一個(gè)請(qǐng)求,完全不需要用戶干預(yù)!這就是 XMLHttpRequest 的強(qiáng)大之處。它可以根據(jù)需要自行與服務(wù)器進(jìn)行交互,用戶甚至可以完全不知道幕后發(fā)生的一切。結(jié)果就是類似于桌面應(yīng)用程序的動(dòng)態(tài)、快速響應(yīng)、高交互性的體驗(yàn),但是背后又擁有互聯(lián)網(wǎng)的全部強(qiáng)大力量。
加入一些 JavaScript
得到 XMLHttpRequest 的句柄后,其他的 JavaScript 代碼就非常簡(jiǎn)單了。事實(shí)上,我們將使用 JavaScript 代碼完成非?;镜娜蝿?wù):
獲取表單數(shù)據(jù):JavaScript 代碼很容易從 HTML 表單中抽取數(shù)據(jù)并發(fā)送到服務(wù)器。
修改表單上的數(shù)據(jù):更新表單也很簡(jiǎn)單,從設(shè)置字段值到迅速替換圖像。
解析 HTML 和 XML:使用 JavaScript 代碼操縱 DOM(請(qǐng)參閱 下一節(jié)),處理 HTML 表單服務(wù)器返回的 XML 數(shù)據(jù)的結(jié)構(gòu)。
對(duì)于前兩點(diǎn),需要非常熟悉 getElementById() 方法,如 清單 2 所示。
清單 2. 用 JavaScript 代碼捕獲和設(shè)置字段值
// 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];
這里沒有特別需要注意的地方,真是好極了!您應(yīng)該認(rèn)識(shí)到這里并沒有非常復(fù)雜的東西。只要掌握了 XMLHttpRequest,Ajax 應(yīng)用程序的其他部分就是如 清單 2 所示的簡(jiǎn)單 JavaScript 代碼了,混合有少量的 HTML。同時(shí),還要用一點(diǎn)兒 DOM,我們就來看看吧。
以 DOM 結(jié)束
最后還有 DOM,即文檔對(duì)象模型??赡軐?duì)有些讀者來說 DOM 有點(diǎn)兒令人生畏,HTML 設(shè)計(jì)者很少使用它,即使 JavaScript 程序員也不大用到它,除非要完成某項(xiàng)高端編程任務(wù)。大量使用 DOM 的是 復(fù)雜的 Java 和 C/C++ 程序,這可能就是 DOM 被認(rèn)為難以學(xué)習(xí)的原因。
幸運(yùn)的是,在 JavaScript 技術(shù)中使用 DOM 很容易,也非常直觀?,F(xiàn)在,按照常規(guī)也許應(yīng)該說明如何使用 DOM,或者至少要給出一些示例代碼,但這樣做也可能誤導(dǎo)您。即使不理會(huì) DOM,仍然能深入地探討 Ajax,這也是我準(zhǔn)備采用的方法。以后的文章將再次討論 DOM,現(xiàn)在只要知道可能需要 DOM 就可以了。當(dāng)需要在 JavaScript 代碼和服務(wù)器之間傳遞 XML 和改變 HTML 表單的時(shí)候,我們?cè)偕钊胙芯?DOM。沒有它也能做一些有趣的工作,因此現(xiàn)在就把 DOM 放到一邊吧。
回頁首
獲取 Request 對(duì)象
有了上面的基礎(chǔ)知識(shí)后,我們來看看一些具體的例子。XMLHttpRequest 是 Ajax 應(yīng)用程序的核心,而且對(duì)很多讀者來說可能還比較陌生,我們就從這里開始吧。從 清單 1 可以看出,創(chuàng)建和使用這個(gè)對(duì)象非常簡(jiǎn)單,不是嗎?等一等。
還記得幾年前的那些討厭的瀏覽器戰(zhàn)爭(zhēng)嗎?沒有一樣?xùn)|西在不同的瀏覽器上得到同樣的結(jié)果。不管您是否相信,這些戰(zhàn)爭(zhēng)仍然在繼續(xù),雖然規(guī)模較小。但令人奇怪的是,XMLHttpRequest 成了這場(chǎng)戰(zhàn)爭(zhēng)的犧牲品之一。因此獲得 XMLHttpRequest 對(duì)象可能需要采用不同的方法。下面我將詳細(xì)地進(jìn)行解釋。
使用 Micr
我是如何從物理學(xué)轉(zhuǎn)行到數(shù)據(jù)科學(xué)領(lǐng)域
很多人問我是如果從物理學(xué)轉(zhuǎn)行到數(shù)據(jù)科學(xué),本文講述了關(guān)于我為什么決定成為一名數(shù)據(jù)科學(xué)家,以及我是如何追求并實(shí)現(xiàn)目標(biāo)的。希望能夠最終鼓勵(lì)更多的人追求自己的夢(mèng)想。讓我們開始吧!
CERN 暑期項(xiàng)目
2017年CERN暑期項(xiàng)目
CERN(歐洲核子研究組織)暑期項(xiàng)目為物理、計(jì)算機(jī)和工程專業(yè)的本科生提供了千載難逢的機(jī)會(huì),讓他們前往瑞士日內(nèi)瓦,與頂尖科學(xué)家一起參加研究項(xiàng)目。
2017年6月,我非常幸運(yùn)地被選中參加這個(gè)項(xiàng)目。粒子物理學(xué)是我的研究方向,能夠參加CERN的研究項(xiàng)目讓我欣喜不已。在為期2個(gè)月的項(xiàng)目期間,針對(duì)CMS(緊湊μ子線圈)實(shí)驗(yàn),我通過世界級(jí)LHC(大型強(qiáng)子對(duì)撞機(jī))計(jì)算網(wǎng)格和云計(jì)算進(jìn)行了相關(guān)分析和模擬。
CMS(緊湊μ子線圈)
此外,暑期項(xiàng)目還包含了一系列圍繞粒子物理和計(jì)算領(lǐng)域的講座、研討會(huì)。
在此期間,通過參加講座、研討會(huì)以及項(xiàng)目,我開始接觸到機(jī)器學(xué)習(xí)和大數(shù)據(jù)分析。令我驚訝的是,機(jī)器學(xué)習(xí)技術(shù)能夠處理大量的數(shù)據(jù),并精確的對(duì)各種微觀粒子進(jìn)行分類和檢測(cè)。接著我毫不猶豫地投入了對(duì)機(jī)器學(xué)習(xí)和云計(jì)算的探究與學(xué)習(xí)。
誰知道這次經(jīng)歷會(huì)成為我人生中的轉(zhuǎn)折點(diǎn),我打算投身數(shù)據(jù)分析。然而此時(shí)我對(duì)數(shù)據(jù)科學(xué)的定義仍比較模糊。
數(shù)據(jù)科學(xué)領(lǐng)域初探
當(dāng)我一結(jié)束暑期項(xiàng)目回到新加坡,我就對(duì)解數(shù)據(jù)科學(xué)進(jìn)行了一些探究,令我驚訝的是,這個(gè)領(lǐng)域并沒有明確的定義。但總的來說,在我看來,數(shù)據(jù)科學(xué)涵蓋了編程、數(shù)學(xué)、統(tǒng)計(jì)知識(shí)以及一定專業(yè)知識(shí)。
盡管如此,我還是驚訝于數(shù)據(jù)是如何被用來為公司得出分析見解,并驅(qū)動(dòng)商業(yè)價(jià)值。從理解業(yè)務(wù)問題,到收集和進(jìn)行數(shù)據(jù)可視化,直到構(gòu)建原型開發(fā)階段,進(jìn)行微調(diào),并將模型部署到實(shí)際應(yīng)用程序中,在這些過程中我發(fā)現(xiàn)了通過使用數(shù)據(jù)解決復(fù)雜問題、完成挑戰(zhàn)的滿足感。
“沒有數(shù)據(jù),你只是一個(gè)空有想法的人”。
—— W. Edwards Deming
我的出發(fā)點(diǎn)—數(shù)據(jù)可視化
Tableau Dashboard
2017年8月,作為進(jìn)入數(shù)據(jù)科學(xué)領(lǐng)域的第一步,我參加了由Tableau和IMDA(Infocomm Media Development Authority)共同組織的NIC Face-Off 數(shù)據(jù)競(jìng)賽,當(dāng)中我首次接觸到數(shù)據(jù)可視化。
當(dāng)中我有機(jī)會(huì)使用Tableau Public對(duì)各種開放數(shù)據(jù)源進(jìn)行可視化,這些數(shù)據(jù)調(diào)查了東南亞霧霾的起源,并提供了可操作性的的見解。
第一份數(shù)據(jù)分析兼職實(shí)習(xí)
在同月,我偶然發(fā)現(xiàn)了一個(gè)機(jī)會(huì)成為了mobilityX的一名數(shù)據(jù)分析實(shí)習(xí)生,這是一家由SMRT資助的初創(chuàng)公司??紤]到可讀性和廣泛社區(qū)的支持,我使用Python進(jìn)行編程。
其實(shí)在我大一開始學(xué)習(xí)編程時(shí),我想過放棄。為了運(yùn)行一個(gè)簡(jiǎn)單的for循環(huán),我可能要花費(fèi)好幾天甚至幾周。而且我常常會(huì)感覺自己沒有天賦。
直到大三我和教授開始一項(xiàng)研究項(xiàng)目,我才開始對(duì)編程產(chǎn)生興趣。我開始使用Python進(jìn)行構(gòu)建,并喜歡上了這個(gè)編程語言。
我開始不在自我懷疑,而是采用以下的步驟學(xué)習(xí)編程:
1. 理解編程的基本邏輯;
2. 選擇一種編程語言并學(xué)習(xí)如何使用(語法等);
3. 練習(xí),練習(xí),再練習(xí);
4. 重復(fù)步驟1-3 。
實(shí)習(xí)一直持續(xù)到2018年3月,期間我的收獲頗多。我學(xué)會(huì)使用PostgreSQL和Python進(jìn)行數(shù)據(jù)清理和操作、web抓取以及數(shù)據(jù)提取。
數(shù)據(jù)科學(xué)全職實(shí)習(xí)
之前經(jīng)歷進(jìn)一步強(qiáng)化了我對(duì)數(shù)據(jù)科學(xué)的喜愛。之后我計(jì)劃了自己的學(xué)習(xí)時(shí)間表,并在2017年12月畢業(yè)后,開始了在Quantum Inventions的數(shù)據(jù)科學(xué)全職實(shí)習(xí)。
看到這里你可能會(huì)問 ,為什么我選擇去實(shí)習(xí)而不是一份數(shù)據(jù)科學(xué)的工作?那就是在申請(qǐng)全職工作之前,能夠通過處理實(shí)際的數(shù)據(jù),獲得更多的技術(shù)知識(shí),并從頭開始體驗(yàn)數(shù)據(jù)科學(xué)的整個(gè)流程。
學(xué)習(xí)資源
以下總結(jié)了我的學(xué)習(xí)過程,當(dāng)中我接受了很多人的幫助,并充分利用了大量的在線資源。
1. 推薦書籍
我讀的第一本數(shù)據(jù)科學(xué)的書是《統(tǒng)計(jì)學(xué)習(xí)導(dǎo)論:基于R應(yīng)用》(An Introduction to Statistical Learning?—?with Applications in R)。這本書對(duì)于初學(xué)者是非常不錯(cuò)的選擇,當(dāng)中著重統(tǒng)計(jì)建模和機(jī)器學(xué)習(xí)的基本概念,并提供詳細(xì)而直觀的解釋。如果你很擅長(zhǎng)數(shù)學(xué),那么你肯定會(huì)喜歡這本書:《統(tǒng)計(jì)學(xué)習(xí)基礎(chǔ)》(The Elements of Statistical Learning)。
還有一些相關(guān)書籍也是不錯(cuò)的選擇,比如Sebastian Raschka的《面向初學(xué)者的機(jī)器學(xué)習(xí)》(Machine Learning for Absolute Beginners),《Python 和機(jī)器學(xué)習(xí)》(Python Machine Learning);以及Jake VanderPlas的《Python數(shù)據(jù)科學(xué)手冊(cè)》( Python Data Science Handbook)。
2. 在線課程
Coursera
我推薦Coursera聯(lián)合創(chuàng)始人吳恩達(dá)的《機(jī)器學(xué)習(xí)》課程。他能夠把復(fù)雜的概念分解成更簡(jiǎn)單內(nèi)容。該課程為期11周,主要圍繞監(jiān)督式學(xué)習(xí)、無監(jiān)督學(xué)習(xí)以及機(jī)器學(xué)習(xí)的實(shí)際應(yīng)用。當(dāng)構(gòu)建機(jī)器學(xué)習(xí)模型時(shí),我仍然會(huì)參考該課程講義,用來解決欠擬合或過度擬合的問題。
Udemy
Jose Portilla的《在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)中使用Python》(Python for Data Science and Machine Learning Bootcamp)是不錯(cuò)的選擇。該課程從Python基礎(chǔ)知識(shí)開始,逐步指導(dǎo)你如何使用scikit-learn和TensorFlow實(shí)現(xiàn)各種機(jī)器學(xué)習(xí)和深度學(xué)習(xí)代碼。本課程詳細(xì)介紹了Python中各種庫(kù),用來實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型。
此外,我強(qiáng)烈推薦Kirill Eremenko和Hadelin de Ponteves的課程《深度學(xué)習(xí)A-Z:人工神經(jīng)網(wǎng)絡(luò)》( Deep Learning A-Z?: Hands-On Artificial Neural Networks )。通過該課程,我第一次接觸到深度學(xué)習(xí)。課程主要通過實(shí)際操作的編程教程,把握監(jiān)督和無監(jiān)督深度學(xué)習(xí)。
Lynda
我推薦Lillian Pierson的課程《在數(shù)據(jù)科學(xué)基礎(chǔ)訓(xùn)練中使用Python》( Python for Data Science Essential Training 。該課程以統(tǒng)計(jì)分析為基礎(chǔ),圍繞數(shù)據(jù)管理和數(shù)據(jù)可視化。
3. LinkedIn
LinkedIn是與數(shù)據(jù)科學(xué)社區(qū)有緊密聯(lián)系的的強(qiáng)大平臺(tái)。人們?cè)敢庠谏厦娣窒硭麄兊慕?jīng)驗(yàn)、想法和知識(shí),從而幫助他人。在LinkedIn上,我學(xué)習(xí)到了很多,無論是技術(shù)知識(shí)還是職業(yè)咨詢等。
4. 其他資源
許多數(shù)據(jù)科學(xué)領(lǐng)域的初學(xué)者經(jīng)常會(huì)被大量的資源所淹沒。除了以上資源平臺(tái)以外,還有Towards Data Science、Quora、DZone、KDnuggets、Analytics Vidhya、DataTau、fast.ai 等都是不錯(cuò)的選擇。
建立作品集
個(gè)人作品集能夠展示你的經(jīng)驗(yàn)和能力,特別是當(dāng)你沒有數(shù)據(jù)科學(xué)方面的博士學(xué)位時(shí)。
由于我只有物理學(xué)的學(xué)士學(xué)位,我沒有計(jì)算機(jī)科學(xué)相關(guān)學(xué)位,在大學(xué)的前三年中我也沒有任何相關(guān)的數(shù)據(jù)科學(xué)作品。建立個(gè)人作品集是很重要的,因?yàn)楣拘枰滥銓W(xué)了些什么,如何能過為公司業(yè)務(wù)貢獻(xiàn)價(jià)值。這也是我決定實(shí)習(xí)和學(xué)習(xí)在線課程的原因。
不久之前,我和朋友一起參加由Shopee和工程與科技協(xié)會(huì)(IET)組織的Kaggle 機(jī)器學(xué)習(xí)挑戰(zhàn)賽。這是我第一次參加Kaggle比賽,我學(xué)習(xí)了如何使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)和遷移學(xué)習(xí)進(jìn)行圖像識(shí)別。
結(jié)語
我分享了我進(jìn)入數(shù)據(jù)科學(xué)行業(yè)的一些情況,希望我的經(jīng)歷能夠讓你覺得數(shù)據(jù)科學(xué)其實(shí)很有趣,并不那么嚇人。直到我接觸到數(shù)據(jù)科學(xué),我才愈發(fā)感受到什么是學(xué)無止境。我希望本文能夠激勵(lì)你去挑戰(zhàn)自己,實(shí)現(xiàn)自己的夢(mèng)想。
;search=pageNum=1
為檢驗(yàn)前 4-6 章的聽課效果,OceanBase 開源團(tuán)隊(duì)在 OBCP 考題中特選出一些前 4-6 期教程的代表性題目作為測(cè)試。
“教程觀看地址”:
“視頻回放合集”:
1.可以針對(duì)某一臺(tái)OBServer或者某一個(gè)租戶,手動(dòng)觸發(fā)轉(zhuǎn)儲(chǔ)命令
正確 錯(cuò)誤
2.OBProxy 需要從 OBServer 獲取 location cache 來路由
正確 錯(cuò)誤
3.OceanBase應(yīng)用日志級(jí)別分為ERROR、WARN、INFO三個(gè)級(jí)別
正確 錯(cuò)誤
1.客戶的OceanBase集群有三個(gè)zone,分別為z1,z2,z3。在正常情況下,客戶的讀寫流量只訪問z1的數(shù)據(jù)庫(kù)節(jié)點(diǎn);在z1整體出現(xiàn)故障的場(chǎng)景下,讀寫流量需要均分到z2和z3。為滿足上述業(yè)務(wù)需求,如下primary zone設(shè)置正確的是?
A(z1,z2,z3) B(z1;z2;z3) C(z1;z2,z3) D(z1,z2;z3)
2.以下關(guān)于OceanBase各類副本,說法錯(cuò)誤的是?
A 全能型副本和日志型副本都參與投票
B 全能型副本和日志型副本都有SSTable
C "只讀型副本有MemTable和SSTable"
D 只讀型副本包含完整的日志
3.集群合并卡住后,哪種操作的風(fēng)險(xiǎn)最小?
A 直接重啟observer進(jìn)程
B stop server
C 先stop server,后重啟observer進(jìn)程
D 先suspend merge,后重啟observer進(jìn)程
4.OceanBase的分布式事務(wù)相比于傳統(tǒng)的兩階段提交做了一些改進(jìn)和優(yōu)化,關(guān)于OceanBase的分布式事務(wù),下列說法正確的是?
A 包括一個(gè)階段:提交階段(commit)
B 包括兩個(gè)階段:準(zhǔn)備階段(prepare),提交階段(commit)
C 包括兩個(gè)階段:提交階段(commit),異步清理階段(clear)
D 包括三個(gè)階段:準(zhǔn)備階段(prepare),提交階段(commit),異步清理階段(clear)
三、多選題
1.OceanBase有哪幾種合并方式
A 定時(shí)合并
B 分層合并
C 手動(dòng)合并
D 臨界合并
E 觸發(fā)合并
2.OceanBase全局一致性方案,說法正確的是?
A 依賴于原子鐘
B 無需依賴特殊硬件
C 依賴root service
D 是一個(gè)高可用的集中式服務(wù)
E 能夠提供全局一致的版本號(hào)
3.關(guān)于OBProxy 的部署方式,下列說法正確的是
A 集中部署
B 客戶端部署
C 單點(diǎn)部署
D 隨時(shí)使用隨時(shí)啟動(dòng)
4.有關(guān)OceanBase mysql錯(cuò)誤碼的表述正確的是?
A 如果一個(gè)錯(cuò)誤碼的值大于4000,表明它是OB特有的錯(cuò)誤碼
B 如果在4000以內(nèi),表示它是MySQL兼容錯(cuò)誤
C 如果一個(gè)錯(cuò)誤碼的值大于等于5000,表明它是OB特有的錯(cuò)誤碼
D 如果在5000以內(nèi),表示它是MySQL兼容錯(cuò)誤
5.OceanBase支持的索引類型包括?
A 局部索引
B Hash索引
C 唯一索引
D Bitmap索引
E 全局索引
6.創(chuàng)建表時(shí),可以使用一些哪些標(biāo)記 ?
A 字母
B 數(shù)字
C #
D _
7.OceanBase中支持的2種租戶模式為?
A Oracle
B SQL Server
C MySQL
D PostGreSQL
學(xué)習(xí)Linux步驟:
1、先了解了解基礎(chǔ)吧,找一本薄一點(diǎn)的,淺一點(diǎn)的書,了解一下什么是linux。有個(gè)基本了解即可。不建議馬上看《鳥哥的Linux私房菜》,這本書很不錯(cuò),如果你了解linux基礎(chǔ)之后再看,對(duì)你可以說是不受益匪淺都不行。沒基礎(chǔ)看《鳥哥的Linux私房菜》比較痛苦,內(nèi)容很多。
2、了解之后,在自己電腦上弄個(gè)虛擬機(jī),裝上linux系統(tǒng)(redhat或ubuntu都行)。專攻《鳥哥的Linux私房菜》。當(dāng)你把這本書攻下來時(shí),才知道原來命令行并不可怕,自己打著打著就很長(zhǎng)啦。
學(xué)linux最主要靠實(shí)踐,不實(shí)踐,只看書對(duì)你沒好處的哦。自己在虛擬機(jī)上慢慢玩吧,玩多了就知道咋回事啦。不懂的多找資料弄懂,弄懂之后再實(shí)踐,這才會(huì)有收獲。
《SQL語言與數(shù)據(jù)庫(kù)操作技術(shù)大全》 本書以應(yīng)用廣泛的SQL Server 2005數(shù)據(jù)庫(kù)為依據(jù),按照數(shù)據(jù)庫(kù)操作的一般順序,用16章的篇幅,以基礎(chǔ)介紹、數(shù)據(jù)庫(kù)及表的創(chuàng)建、數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)控制、事務(wù)控制和數(shù)據(jù)庫(kù)管理的順序,由淺到深地介紹Transact-SQL語言。 《24小時(shí)sql 2005 教程》(SQL Server 2005 Express in 24 Hours) 簡(jiǎn)介:寫的清楚,而且實(shí)用。本書的作者是一個(gè)專家級(jí)的人物。他清楚詳細(xì)的介紹了基本概念。 《SQL Server 2005盛宴系列課程》[ISO] 《零基礎(chǔ)學(xué)SQL Server 2005 教案PPT/隨書光盤》
看你學(xué)習(xí)oracle用來做什么了 數(shù)據(jù)庫(kù)管理方面:Oracle.9i數(shù)據(jù)庫(kù)管理員指南
sql方面:oracle+SQL語法大全 程序設(shè)計(jì)相關(guān)的:Oracle專家高級(jí)編程 這三本書就差不多了 你去oracle網(wǎng)站上有oracle的白皮書,入門夠用了
學(xué)習(xí)C++有那些步驟:
1。學(xué)習(xí)C++基本語法,參考書籍《C++程序設(shè)計(jì)》》錢能著,或《C++程序設(shè)計(jì)教程》DEITEL著,我看的是后者;
2。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),參考書籍《數(shù)據(jù)結(jié)構(gòu)C++語言描述——應(yīng)用標(biāo)準(zhǔn)模板庫(kù)(STL)》William Ford著; 3。學(xué)習(xí)STL,參考書籍《C++標(biāo)準(zhǔn)程序庫(kù)》候捷譯;
4。學(xué)習(xí)模板,參考書籍《泛型編程與STL》候捷譯;
5。深入STL內(nèi)部,直到能自己寫出STL的源碼,參考書籍《STL源碼剖析》候捷譯;
6。學(xué)習(xí)I/O方面的知識(shí),參考書籍《Standard C++ IOStream and Locales》;
7。重溫整個(gè)C++體系,參考書籍《C++ PRIMER》和《the c++ programming language》;
8。學(xué)習(xí)前人的技巧和方法,參考書籍〈effective c++,,;
9。再往上走,從宏觀上把握C++程序設(shè)計(jì)體系,參考書籍設(shè)計(jì)模式,《深入探索C++對(duì)象模型》,大規(guī)模C++程序設(shè)計(jì);
接下來就可以分2條路走了:
一。偏理論的道路,考研,注意,不是考計(jì)算機(jī)系,是考數(shù)學(xué)系,學(xué)習(xí)集合論,圖論等知識(shí),有一套書叫〈計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)〉一至三卷,等你把他們都看完了,理解透了,就可以直接去微軟投簡(jiǎn)歷了。
二。偏應(yīng)用的道路,學(xué)習(xí)windows編程,學(xué)習(xí)MFC,COM,ATL,以及整個(gè).NET體系。