上上個周一,在前一天項目剛提交,周一早上2點開始睡覺,5:40又起床參加用友的面試去。其實我沒有給用友投簡歷,那個負責人打電話給我說看到我的簡歷了,然后問了一些java基礎知識,我沒有一個答對了。結果人家指定了出題范圍,說那我給你兩周的時間,你學習一下,來參加面試吧。到了面試這一天,首先進行筆試,給了7,8頁紙的題。我估計自己只做對了兩道。然后是技術面試,那個給我打電話的負責人自己面試我。負責人拿著我的筆試題目,告訴我哪道題做得不對,然后啟發式的誘導我給出一個符合他心意的答案。可是我只睡了這么幾個小時,而且之前是一只連續的加班,覺得自己的頭腦都沒有思考能力了,最終我只是說我不會。那個負責人說那你大概是屬于實戰型的。于是讓我上機做題。考察的數據庫的方面,自然是會做,可是那個負責人說要我設計成一個方便使用的,于是我就開始改。已經是中午的時間了,負責人喊我一起吃飯。后來朋友告訴我,這是人事面試。吃完飯,繼續上機,我當時心里稍稍有點想放棄的感覺,因為自己答得實在太差了,而且我真的累了。后來負責人再啟發我按他的思路來的時候,我只是聽著,并不打算做了。負責人說那咱們再到外面去談一談。負責人告訴我他覺得基礎是挺差的。但是這關系不大,他更想要一個聰明的,學習能力強的。這樣培養半年就差不多了,可以幫幫他的忙,他總是一遍一遍的給手下人講這將那的,太累了。他說一是這邊女孩子比例已經有點大,另外我基礎實在不行,所以猶豫了一下。看我很有自信心,還是決定帶我去參加人力資源部的面試了。可以人力資源部的人正好沒空,于是讓我下周再來。那個負責人就給我指定了更具體的學習范圍。不過那一周,也就是上周沒有人打電話給我去參加人力資源部的面試,應該是人家又找到更合適的了吧。但是我確實到現在都在按照他的指導在進行學習,這兩天面試做java基礎題非常的順手,面試人員都說我基礎知識很扎實。而僅僅在兩周之前,真的是問我什么我都不會啊。真的很想再讓那個負責人面試一下,證明給他看我真的是學東西特別快。我相信他可能看起來會嚴厲一些,卻是個好老師,好leader。如果有機會,真的想和他一起工作。
我可憐的彼氏這么晚了,仍然加班中……感覺自己技術上確實有很多欠缺。又很久沒有參加coding了,對技術反應稍顯遲鈍。所以我決定先做一段時間的項目,再找一個自己喜歡的工作。基于這個想法,上周三時參加了一個為期三周的小項目的招聘面試,周四就上班了。
這個項目的業務:saas
所用技術:struts框架 + tomcat服務器 + oracle數據庫 + JSP + java
目前我只負責后臺,struts框架和JSP基本沒有接觸。
在第一天配置環境的時候,tomcat插件的安裝出了點問題。
按理說,我配置好了jdk1.5,設置好了java和tomcat的環境變量,把eclipse和tomcat安裝上了,再把tomcat的插件放到eclipse的plugins包下,應該就沒什么問題了。可是我因為要用一個工程的代碼,就考了同事的workspace,結果在eclipse,點tomcat的啟動圖標,啟動不了tomcat。所有的配置都正確,太奇怪了,怎么都找不到原因。而且可以新建一個tomcat的服務,而且可以啟動。最后,新建了一個workspace,清了一下設置,終于好使了。但是總有點不甘心,不知道到底哪個設置有問題。
今天面試了一家直接赴日的公司,老板對我的各方面什么都滿意,沒什么可說的。但是和日本有關的公司就是程序比較多,說過幾天安排二面。如果二面不通過,人家會聯系別的部門再給我面試。明天打算休息,學點東西。這幾天翻譯來了,和人家一比,才發現自己的日語說的真的不行。但是真的沒有翻譯的時候,大家基本都能自己來交流,大家說,聽不懂整句話可以聽關鍵詞,自己說不出整句話可能只說關鍵詞,這樣都可以溝通了。所以加強對關鍵詞的理解,才能了解到客戶的意圖。
様々な連結テーブルが作成できるが、良く使うものはビュー(create view) に しておくと効率が良い。各種各樣的連接表中,有的對視圖也起作用。
結合は、テーブルとテーブル、ビューとビュー、テーブ ルとビューなど複雑にできる。(テーブル連結)連接可以在數據表和數據表之間,視圖和視圖之間,數據表和視圖之間復雜的進行。
■単純結合 簡單連接 ?現実的に単純結合を使う機會はないだろう。實際上簡單結合沒有什么使用的機會。It is known to all that ours is an age of information characterized by innumberable inventions beyond our wildest imagination even decades age. Eletronic dictionaries have found their way into numerous students's backpacks; digital cameras have gained increasing popularity among common households. Now surprisingly, some even claim that e-books will take the place of traditonal ones.
次の例では、受注m の各レコードに 品番m の全レコードが結合される。
在下面的例子中,在受注m的各種記錄里,品番m的所有記錄都被結合了。
受注m のレコード數 x 品番m のレコード數の結果が問い合わされる。
受注m的記錄數*品番m的記錄數的結果被查詢出來。 select * from sak.受注m, sak.品番m; ■等価結合 等價連接 ?等価結合は、特定のキーで表を結合します。等價連接是用特定的鍵來進行表的結合的。
條件のどちらかのデータが存在しない場合、結果セットには含まれません。
如果有條件在數據表里不存在,在結果集里就沒有這一條記錄。
現実的には外部結合が一番使いやすいと思います。在實際上,外部結合是最容易使用的。
select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m, sak.品番m where 受注m.品番 = 品番m.品番 ; ?列の別名定義は、as を指定してもよい。列的別名指定,也可以用as來實現。
結合テーブルに同じ項目名が存在する場合は、どちらのテーブル項目か指定するため、テーブル名で修飾する。(受注m.品番)
在連接表中如果有相同的項目名存在,為了讓每一個項目都被指定,就用項目名來修飾。
select 受注番號, 受注m.品番 as 品番, 品番m.入庫數 as 入庫數 from sak.受注m, sak.品番m where 受注m.品番 = 品番m.品番; ?inner join を使用して、等価結合することもできます。(インナージョイン)
使用inner join,也可以進行等價連接。
select 受注番號, 受注m.品番 as 品番, 品番m.入庫數 as 入庫數 from sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番; ?3 つ以上の結合を inner join で指定するには、次のようにする。
如果有三個以上要指定inner join 來進行連接的時候,可以像下面這樣做。
select * from (sak.受注m inner join sak.品番m on 受注m.品番 = 品番m.品番) inner join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD; ■非等価結合 非等價連接 ?非常に時間のかかる結合ですが、必要な場面があるかもしれない。雖然很花時間,但有時候也要進行下面的檢索。
なにがしかの範囲條件で結合する場合に使います。和檢索條件的一部分進行連接。
select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m, sak.品番m where 受注m.機種 like substr(品番m.機種, 1, 2);
■外部結合 外結合、行結合、行連結、テーブル結合、外部接合
外部連接 外連接,行連接,表連接,外部連接
?外部結合は、一番よく使用します。外部連接是最經常使用的。
一方の條件に対するデータが存在しなかった場合でも片方のデータを結果セ ットに含める指定ができます。
對于一方的條件即使不存在,也可以使結果集包含一邊的數據。
次の例では、品番m にない品番の受注m レコードも結果に含まれます。
在下面的例子中,在品番m中沒有的品番受注m記錄的結果也包含了進來。
この場合、入庫數などの 品番m 項目には NULL がセットされて問い合わさ れます。Oracle では、left join、right join を (+) で指定できます。
這時候,入庫數等的品番m項目里被設定了NULL值。在oracle里,left join,right join 可以用(+)來指定。
(左結合、右結合、複數テーブル問い合わせ、複數テーブル參照) (複數問い合わせ、複合テーブル參照、レフトジョイン、ライトジョイン)
(左連接,右連接,多個表查詢,多個表參照,左連接,右連接)
select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m, sak.品番m where 受注m.品番 = 品番m.品番 (+); select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番; ?逆に受注m にない品番の品番m レコードを結果に含ませることもできます。 現実的には、こういう結合に意味はありませんが、逆の和もできると言うこ とです。
?相反不在受注m里的品番m記錄也可以在結果里包含。在實際中,雖然沒有這么用的,但是(+)也可以放在=之前。
select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m, sak.品番m where 受注m.品番 (+) = 品番m.品番; select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數 from sak.受注m right join sak.品番m on 受注m.品番 = 品番m.品番; ?三つ以上の表を結合することもできます。(3 テーブル結合)
?也可以進行三個表以上的表連接。(三表連接)
次の例では、品番に対する品番m.入庫數、得意先CD に対する得意先m.得意 先名を結合しています。(left join を使用しても良い。)
在下面的例子中,對于品番的品番m.入庫數,對于得意先CD的得意先m.得意先名來進行連接。(也可以使用左連接)
select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數, 受注m.得意先CD 得意先CD, 得意先m.得意先名 得意先 from sak.受注m, sak.品番m, sak.得意先m where 受注m.品番 = 品番m.品番 (+) and 受注m.得意先CD = 得意先m.得意先CD (+); select 受注番號, 受注m.品番 品番, 品番m.入庫數 入庫數, 受注m.得意先CD 得意先CD, 得意先m.得意先名 得意先 from (sak.受注m left join sak.品番m on 受注m.品番 = 品番m.品番) left join sak.得意先m on 受注m.得意先CD = 得意先m.得意先CD; ?複數の表を結合すると修飾が難解になりがちなので、テーブル別名を使うと 良いです。
如果多個表進行連接,修飾會變得很復雜,也可以使用表別名。
select 受注番號, a.品番 品番, b.入庫數 入庫數, a.得意先CD 得意先CD, c.得意先名 得意先 from sak.受注m a, sak.品番m b, sak.得意先m c where a.品番 = b.品番 (+) and a.得意先CD = c.得意先CD (+); ** 外部結合を明示するために left join を left outer join、right join を right outer join と書くこともできる。
** 為了明確外部連接,也可以把left join 寫成 left outer join, right join寫成right outer join。
(アウタージョイン、レフトアウタージョイン、ライトアウタージョイン)
(outer join, left outer join, right outer join)
■再帰結合(內部結合) 回歸連接(內部結合) ?再帰結合は、同じテーブルをテーブル別名を使用して結合します。
?回歸連接是相同的表來用別名來進行連接的。
次の例では、得意先m に親得意先CD があるとして、その得意先名を自分自 身と結合しています。(自己結合)
在下面的例子中,以得意先作為父得意先,然后用這個名字來進行自身連接。
select a.得意先CD 得意先CD, a.得意先名 得意先, a.親得意先CD 親得意先CD, b.得意先名 得意先 from sak.得意先m a, sak.得意先m b where a.得意先CD = b.親得意先CD (+);
站在一個光輝的焦點,看到周圍就會是一片漆黑。如果在光線的邊緣放一塊玻璃,它將會成為一面貨真價實的鏡子。比如說古代的皇帝,就會感嘆自己是周圍空無一人的孤家寡人。
在焦點以外的人,看焦點中的人會分外清晰,他會不明白自己為什么不被焦點中的人看到。比如說古代的才子,就會感嘆自己的郁郁不得志。
站在焦點中和焦點外感嘆的人,両方も可哀そうに。靜兒,他人の立場から見てね。
春節回家的時候,讀了自己高中時的作文本。對于過去的自己,有種不可思議的感覺。為什么現在一無所長的自己,那時候竟能寫出那樣的文字。果然,家才是我力量和思想的源泉。
人是因為所有感觸,才會想要改變這個世界,改變自己的吧!而正是這些改變,是人存在于這個世界的證明。現在一個人住,總是一個人的自己,只是這個世界的幽靈。果然,有自己關心的人,有關心自己的人,有自己想改變的人,有改變自己的人的家里,我是真實的存在著。
人最不愿意承受的感覺是痛苦嗎?總覺得什么也感受不到的麻木更為悲哀呢!現在的自己,完全感受不到別人的心,看不到一個人語言之外流露出的信息。于是,我幫不了別人,也幫不了自己。高中的作文本里,有這樣一段話:“現在我們兄妹見面時,他還是冷冷的,但就像X射線能穿透幾厘米厚的鋼板一樣,我以從小對他的了解和我們血脈相連的感情作為穿透力,我可以探測到他心底的溫存。”果然,能夠感受別人的感受的家里的我,才可以這樣自信。
為什么我要這樣孤立自己?原是想給自己更多的時間思考;生活的事能在意的更少的話,自己會變的更純粹;如果發現自己有什么性格缺陷之類的話,要改是很難的,但如果給自己一段時間忘記過去的自己,然后將自己重塑的話,是可以做到的。但現在雖然有時間,卻全然不知道該想些什么;有沒有更純粹我沒有感受到,只發現自己頭腦越來越簡單;忘卻自己是很容易的,我卻不能判斷要將自己塑造成什么樣子。家里的我,事情總是一件件接踵而來,一邊思考著事情的解決方案,一邊享受著解決了的事情帶來的喜悅,這些事情是無暇去想的吧!
家到底是什么?對于我,它大概是一個存放著過去的箱子。出過車禍之后,自己變得很健忘。雖然不開心的事情會很快忘記,但同時也會忘記自己的理想,自己的理念,自己一路走來最寶貴的經歷。但所有這一切都不是真實的忘卻,只是被埋的更深,如果我愿意,可以把家建在心里。靜兒是不會放棄的。頑張るわ!
相關運行環境:
1.jdk150_04
2.eclipse3.2
3.weblogic server9.2
4.wtp-R-1.5.4-200705021353(里面包含ejb插件)
5.xdoclet-1.2.3
ejb工程的創建:
基本上直接點擊“下一步”即可。但要注意看
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.NamingException;
public class TestClient {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "t3://localhost:7001";
// Hashtable env = new Hashtable();
// env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
// env.put(Context.PROVIDER_URL, url);
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
int dayCurrent = 0;
Test my = null;
try {
my = TestUtil.getHome(properties).create();
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (CreateException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (NamingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
dayCurrent = my.foo("").get(Calendar.DAY_OF_YEAR);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Calendar birthday = Calendar.getInstance();
int year = 0;
int month = 0;
int day = 0;
System.out.println("誕生日を入力してください:");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.print("年:");
year = Integer.parseInt(in.readLine());
System.in.skip(6);
System.out.print("月:");
month = Integer.parseInt(in.readLine())-1;
System.in.skip(6);
System.out.print("日:");
day = Integer.parseInt(in.readLine());
} catch (IOException e) {
System.out.print("フォーマットが違います。");
}
birthday.set(year, month, day);
int yearCount=0;
int dayBirthday = birthday.get(Calendar.DAY_OF_YEAR);
int dayCount = dayBirthday - dayCurrent;
try {
yearCount=my.foo("").get(Calendar.YEAR)-birthday.get(Calendar.YEAR);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (dayCount >= 0)
System.out.println("あなたの"+yearCount+"才誕生日は" + dayCount + "日後です。");
else
System.out.println("あなたの"+yearCount+"才誕生日は" + Math.abs(dayCount) + "日前です。");
}
}
運行結果:
誕生日を入力してください:
年:1986
月:10
日:12
あなたの21才誕生日は24日前です。