現在做互聯網產品的團隊都比較小,也可能沒有特別多運維人員。因此特別需要用一些系統或是工具來監控服務器或者是服務是否正常。之前比較直接的做法是自己搭建一套開源的監控系統,現在隨著云服務器的流行,也有越來越多的人用戶會使用云端的監控平臺。
阿里云監控
360網站服務監控
監控寶
posted @ 2014-11-25 17:49 qiyadeng 閱讀(7269) | 評論 (1) | 編輯 收藏
基于用戶畫像的大數據實例
電商系統的心得分享
跨平臺大型在線客服系統的技術構架
阿里分布式數據庫服務實踐
平臺架構的服務器監控
作者簡介:qiyadeng(www.qiyadeng.com)對互聯網技術、運營及市場領域有濃厚的興趣,喜愛思考、閱讀、討論;擅長Java開發及分布式技術?,F專注于互聯網的創新產品--老來寶(http://www.laolaibao.com),立志于幫助廣大鳳凰(diao)男(si)提供補充養老金管理平臺。
posted @ 2014-11-17 14:57 qiyadeng 閱讀(4179) | 評論 (0) | 編輯 收藏
posted @ 2013-06-13 23:18 qiyadeng 閱讀(11230) | 評論 (1) | 編輯 收藏
簡單介紹一下8個Java牛人,他們為Java社區,創建了框架(framework),產品或者是寫書,影響甚至改變了Java開發的方法(根據個人喜好排序)。
8.Tomcat創始人
James Duncan Davidson,是當時Sun公司的軟件工程師(1997-2001),創建了Java的Web服務器Tomcat,Tomcat廣泛應用于Java Web開發的各個領域。
7.測試驅動開發JUnit創始人
Kent Beck,極限編程和測試驅動開發方法的締造者。此外,他還創造了JUnit,JUnit目前一次成為Java開發測試的事實標準。基于測試驅動的開發方法和JUnit給Java開發的方法帶了巨大的變化。
6.Java Collections框架設計者
Joshua Bloch,領導設計了Java平臺的許多功能,包括Java 5.0 版本中飽受贊譽的Java Collections框架。2004年他離開Sun公司,成為Google的首席Java架構師,此外他的著作“Effective Java”基本上是學習Java的必讀之書。
5.JBoss創始人
Marc Fleury,在2001年創造了JBoss,JBoss是一個Java開源的應用服務器,也已經成為Java Web應用部署中的事實標準。后來他把JBoss買給了RedHat,之后繼續從事JBoss的開發工作。不過2007年他離開了RedHat去追求他的個人愛好。
4.Struts創始人
Craig Mcclanahan,創建了Struts,一個流行的基于Java的MVC開源框架,基本上很多Java開發者都知道如何開發Struts的應用程序。
3.Spring創始人
Rod Johnson,Spring框架的創始人,Spring Source的CEO。Spring是一個非常流行的Java應用程序開發的開源框架。此外,他的著作Expert One-to-One J2EE Design and Development,是J2EE最有影響力的一本書。
2.Hibernate創始人
Gavin King,Hibernate的創始人,一個流行的Java ORM解決方案;同時他也是Seam的創始人,此外他為EJB3.0和JPA也做出了突出的貢獻。
1.Java之父
James Gosling,1994年發明了Java語言,他創建了Java編譯器和虛擬機。在2010年,當Oracle收購Sun公司時,他離開了Sun公司。
原創文章,作者:qiyadeng,轉載請注明: 轉載自http://www.qiyadeng.com/
本文鏈接地址: 你應該知道的8個Java牛人
posted @ 2013-05-08 21:56 qiyadeng 閱讀(3521) | 評論 (1) | 編輯 收藏
1.申請開發者帳號
首先注冊百度的帳號,然后申請成為百度開發者(需要通過手機進行身份證驗證)。
2.新建應用
點擊菜單中的創建應用,我們目前選擇的是Web應用。
應用創建之后,選擇左邊菜單的云環境,環境類型需要選擇JAVA。
并新創建一個版本,輸入1作為版本號
3.在百度集成開發環境中開始開發
百度提供了基于Eclipse的插件,由于該插件不能支持最新的Eclipse版本。建議下載百度的一鍵安裝版本。百度文檔中介紹了如何使用開發環境,詳細請看集成開發環境使用。
打開百度集成開發環境,在Eclipse左下角點擊Login to Baidu,使用你的賬號登陸。然后點擊工具欄中百度Logo,選擇Import BAE Project,填入application和version
之后選擇Java作為Project Language。
4.解決項目錯誤
剛導入的BAE project,在Eclipse中會報錯。通過problems view可以看到是因為JRE環境配置不正確和Web運行環境設置不正確。
A.右鍵項目屬性--選擇JavaBuildPath,在Libraries中選擇Add Library,之后再選擇JRE System Library。
B.接下來把Java project轉換為Java Web Project(Eclipse中Java Project轉換為Java web Project),注意如果你的tomcat是6版本的話,請注意選擇Dynamic web Module的版本不超過2.5。
設置Web應用的運行環境,在servers view中新建一個tomcat服務器。
C.和A類似,在Java Build Path中加入 Server Runtime,選擇Tomcat。
D.修改hello.jsp,在hello.jsp中加入如下代碼
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
E.把項目部署到tomcat中。
至此項目錯誤全部解決,應該可以看到運行結果。
5.新建Servert測試
新建一個Servlet,HomeServlet,Eclipse會自動在web.xml中加入配置信息,HomeServet.java和web.xml的部分代碼如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1>BAE Servlet Test.</h1>");
}
web.xml中部分代碼
<servlet>
<description></description>
<display-name>HomeServlet</display-name>
<servlet-name>HomeServlet</servlet-name>
<servlet-class>com.qiyadeng.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/HomeServlet</url-pattern>
</servlet-mapping>
6.最后
BAE中Java環境中百度使用的Jetty,而不是tomcat,Jetty的好處是不需要頻繁的重啟,修改的代碼即時就可看到運行結果。
通過SVN提交代碼到BAE,如果有需要做小的修改,可以通過百度的在線編輯工具直接修改。
原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/
本文鏈接地址: 百度開發者中心BAE新建Java應用
posted @ 2013-04-21 13:35 qiyadeng 閱讀(343) | 評論 (0) | 編輯 收藏
1.申請開發者帳號
首先注冊百度的帳號,然后申請成為百度開發者(需要通過手機進行身份證驗證)。
2.新建應用
點擊菜單中的創建應用,我們目前選擇的是Web應用。
應用創建之后,選擇左邊菜單的云環境,環境類型需要選擇JAVA。
并新創建一個版本,輸入1作為版本號
3.在百度集成開發環境中開始開發
百度提供了基于Eclipse的插件,由于該插件不能支持最新的Eclipse版本。建議下載百度的一鍵安裝版本。百度文檔中介紹了如何使用開發環境,詳細請看集成開發環境使用。
打開百度集成開發環境,在Eclipse左下角點擊Login to Baidu,使用你的賬號登陸。然后點擊工具欄中百度Logo,選擇Import BAE Project,填入application和version
之后選擇Java作為Project Language。
4.解決項目錯誤
剛導入的BAE project,在Eclipse中會報錯。通過problems view可以看到是因為JRE環境配置不正確和Web運行環境設置不正確。
A.右鍵項目屬性--選擇JavaBuildPath,在Libraries中選擇Add Library,之后再選擇JRE System Library。
B.接下來把Java project轉換為Java Web Project(Eclipse中Java Project轉換為Java web Project),注意如果你的tomcat是6版本的話,請注意選擇Dynamic web Module的版本不超過2.5。
設置Web應用的運行環境,在servers view中新建一個tomcat服務器。
C.和A類似,在Java Build Path中加入 Server Runtime,選擇Tomcat。
D.修改hello.jsp,在hello.jsp中加入如下代碼
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
E.把項目部署到tomcat中。
至此項目錯誤全部解決,應該可以看到運行結果。
5.新建Servert測試
新建一個Servlet,HomeServlet,Eclipse會自動在web.xml中加入配置信息,HomeServet.java和web.xml的部分代碼如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1>BAE Servlet Test.</h1>");
}
web.xml中部分代碼
<servlet>
<description></description>
<display-name>HomeServlet</display-name>
<servlet-name>HomeServlet</servlet-name>
<servlet-class>com.qiyadeng.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HomeServlet</servlet-name>
<url-pattern>/HomeServlet</url-pattern>
</servlet-mapping>
6.最后
BAE中Java環境中百度使用的Jetty,而不是tomcat,Jetty的好處是不需要頻繁的重啟,修改的代碼即時就可看到運行結果。
通過SVN提交代碼到BAE,如果有需要做小的修改,可以通過百度的在線編輯工具直接修改。
原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/
本文鏈接地址: 百度開發者中心BAE新建Java應用
posted @ 2013-04-21 13:33 qiyadeng 閱讀(12340) | 評論 (12) | 編輯 收藏
空指針異常(Null Pointer Exception)是我們平時最容易碰到的,也是最令人討厭的異常。本文介紹如何避免出現空指針異常。
首先我們看如下的示例
private Boolean isFinished(String status) {
if (status.equalsIgnoreCase("Finish")) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
private Boolean isFinished(String status) {
if ("Finish".equalsIgnoreCase(status)) {
return Boolean.TRUE;
} else {
return Boolean.FALSE;
}
}
接下來我將接著提供幾種避免空指針的建議。
1.判斷Collection是否為空。
2.使用一些判斷方法。
3.assert關鍵字。
4.Assert類。
5.異常處理。
6.太多的點.操作語法。
7.使用StringUtils類
1.判斷Collection是否為空
Collection 為空是指Collection中沒有元素。一些開發者如果碰到Collection中沒有元素的時候,經常return null,更好的做法是,你應該return Collections.EMPTY_LIST,Collections.EMPTY_SET或者是Collections.EMPTY_MAP.
錯誤的代碼
public static List getEmployees() {
List list = null;
return list;
}
正確的代碼
public static List getEmployees() {
List list = Collections.EMPTY_LIST;
return list;
}
2.使用一些判斷方法
使用一些方法如contains(),indexOf(),isEmpty(),containsKey(),ContainsValue和hasNext()等來判斷,確保不存在空值。
示例:
String myName = "qiyadeng";
List list = Collections.EMPTY_LIST;
boolean exist = list.contains(myName);
int index = list.indexOf(myName);
boolean isEmpty =list.isEmpty();
Map map =Collections.EMPTY_MAP;
exist=map.containsKey(myName);
exist=map.containsValue(myName);
isEmpty=map.isEmpty();
Set set=Collections.EMPTY_SET;
exist=set.contains(myName);
isEmpty=set.isEmpty();
Iterator iterator;
exist = iterator.hasNext();
3.assert關鍵字
在Java1.4版本之后,提供了斷言assert來確定你的代碼中的假設。使用的語法如下:
assert expression1
另外一種使用方法
assert expression1:expression2
示例:
public static String getManager(String employeeId) {
assert (employeeId != null) : "employeeId must be not null";
return "qiyadeng";
}
注意記得使用java選項中加入-enableassertion開啟assertion功能。
4.Assert類
Assert類在com.bea.core.repackaged.springframework.util包中,有許多方法可以用于斷言。
public static String getManager(String employeeId) {
Assert.notNull(employeeId, "employeeId must be not null");
Assert.hasLength(employeeId, "employeeId must has length greater than 0");
return "qiyadeng";
}
5.異常處理
使用try catch處理異?;蚴菣z查變量是否為空。
public static String getManager(String employeeId) {
return null;
}
String managerId = getManager("A015");
System.out.println(managerId.toString());
try-catch方法
String managerId = getManager("A015");
try {
System.out.println(managerId.toString());
} catch (NullPointerException npe) {
//write your code here
}
String managerId = getManager("A015");
if (managerId != null) {
System.out.println(managerId.toString());
} else {
//write your code here
}
6.不要太多的點.操作語法
一些開發者使用太多的這樣的方法來減少代碼,但是這個對后面的維護和異常處理都是不太好的。
錯誤的寫法
String attrValue = (String)findViewObject("VO_NAME").getCurrentRow().getAttribute("Attribute_NAME");
ViewObject vo = findViewObject("VO_NAME");
Row row = vo.getCurrentRow();
String attrValue = (String)row.getAttribute("Attribute_NAME");
7.使用StringUtils類
StringUtil是org.apache.commns.lang包中的類,我們可以使用該類來避免空指針異常。
例如 StringUtils.isEmpty(),StringUtils.isBlank,StringUtils.equals()等等,更多的你可以參考文檔。
為了不出現空指針異常,在寫代碼的過程中需要時刻檢查你的代碼是否會拋出NullPointerException,如果你沒有時間及時調整的話,使用//TODO標記,便于你后面解決問題。
原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/
posted @ 2013-04-11 23:08 qiyadeng 閱讀(1939) | 評論 (0) | 編輯 收藏
現在經常需要根據用戶提供的位置,提供一些和位置相關的信息。有時可以直接確定用戶的經度和緯度,有時不一定可以確定用戶的經度和緯度信息,用戶是 通過輸入一些路名、標志性建筑或是商場名等位置,但是我們的數據庫可能并沒有存法用戶可能輸入的這些位置信息的經度緯度,這時候可以使用一些地圖提供的 API來確定,用戶所輸入的位置信息的經度和緯度。
我們使用百度地圖提供的GeoCoding API實現從位置信息到經度緯度的轉換,詳細的使用說明可以參考GeoCoding API。我們這里做一個簡單的演示HttpClient httpClient = new DefaultHttpClient();
String url = geoCodeRequestUrl(query);
logger.log(Level.INFO, url);
HttpGet httpget = new HttpGet(url);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpClient.execute(httpget, responseHandler);//百度返回的經度緯度信息xml
logger.log(Level.INFO,"baidu response:"+responseBody);
return responseBody;
}
public String geoCodeRequestUrl(String query) throws UnsupportedEncodingException{
String url = WeChatConstant.BASEURL + "geocoder?address=" + URLEncoder.encode(query,"UTF-8") + "&key="
+ WeChatConstant.MAPKEY + "&output=" + WeChatConstant.OUTPUTFORMAT;
return url;
}
public void testGeoCode() throws Exception {
BaiduMapService bms = new BaiduMapService();
String response = bms.getGeoCode("上地十街十號");
BaiduGeoCodeResponse res = BaiduGeoCodeResponse.getBaiduGeoCode(response);//解析xml
System.out.println(res.toString());
}
<status>OK</status>
<result>
<location>
<lat>40.057098</lat>
<lng>116.307175</lng>
</location>
<precise>1</precise>
<confidence>80</confidence>
<level>道路</level>
</result>
</GeocoderSearchResponse>
BaiduGeoCodeResponse [lat=40.057098, lng=116.307175]
原創文章,轉載請注明: 轉載自http://www.qiyadeng.com/
本文鏈接地址: 確定路名、標志性建筑和商場名的經度緯度
posted @ 2013-03-27 22:08 qiyadeng 閱讀(1407) | 評論 (0) | 編輯 收藏