﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-西津渡,hadoop ，云计算</title><link>http://www.blogjava.net/stephen80/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 02 May 2026 11:21:57 GMT</lastBuildDate><pubDate>Sat, 02 May 2026 11:21:57 GMT</pubDate><ttl>60</ttl><item><title>c++ difference from java</title><link>http://www.blogjava.net/stephen80/archive/2010/02/03/311784.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 03 Feb 2010 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2010/02/03/311784.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/311784.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2010/02/03/311784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/311784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/311784.html</trackback:ping><description><![CDATA[c++ difference from java <br />
1. take charge of object management , negotiate ownershiop ,use scoped_ptr,<br />
&nbsp;&nbsp; not to transfer other's ownership<br />
2. use c++ template to express seperation corncern ,such as (static)polymorphy and policy<br />
3. disable copy constructor and assign operator by yourself<br />
4. polymorphy by pointer<br />
5. 使用 template ,macro 取得类似动态语言的能力<br />
6. 偏好无状态的 函数<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/311784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2010-02-03 11:43 <a href="http://www.blogjava.net/stephen80/archive/2010/02/03/311784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql best practice</title><link>http://www.blogjava.net/stephen80/archive/2010/01/05/308270.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 05 Jan 2010 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2010/01/05/308270.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/308270.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2010/01/05/308270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/308270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/308270.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CJIANQI%7E1.HZ%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
</xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if !mso]>
<style>
st1":*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
h1
{mso-style-link:" Char Char5";
margin-top:17.0pt;
margin-right:0cm;
margin-bottom:16.5pt;
margin-left:0cm;
text-align:justify;
text-justify:inter-ideograph;
line-height:240%;
page-break-after:avoid;
font-size:22.0pt;
font-family:Calibri;
mso-bidi-font-family:"Times New Roman";
font-weight:bold;}
h3
{mso-style-link:" Char Char3";
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:0cm;
text-align:justify;
text-justify:inter-ideograph;
line-height:173%;
page-break-after:avoid;
font-size:16.0pt;
font-family:Calibri;
mso-bidi-font-family:"Times New Roman";
font-weight:bold;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;
text-underline:single;}
p
{
margin-right:0cm;
margin-left:0cm;
font-size:12.0pt;
font-family:宋体;}
pre
{margin:0cm;
margin-bottom:.0001pt;
tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
font-size:12.0pt;
font-family:宋体;}
span.CharChar5
{mso-style-name:" Char Char5";
mso-style-link:"标题 1";
font-family:Calibri;
font-weight:bold;}
span.CharChar3
{mso-style-name:" Char Char3";
mso-style-link:"标题 3";
font-family:Calibri;
font-weight:bold;}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
<h1><span>Myisam is preferred without transaction and little
update(delete)</span></h1>
<p>Big than 4G datafile can user Myisam merge table. </p>
<h1>InnoDB with auto_increment primary key is preferred.</h1>
<h1>Few storage process</h1>
<h1><span>Guess: 20m
records max per table , 500G
data max per tablespace , 256 tables per database (may problem)</span></h1>
<h1>Use prepared statement and &nbsp;batch </h1>
<h3>Optimize Your Queries For the Query Cache</h3>
<pre>// query cache does NOT work</pre>
<pre>$r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= CURDATE()");</pre>
<pre>&nbsp;</pre>
<pre>// query cache works!</pre>
<pre>$today = date("Y-m-d");</pre>
<pre>$r = mysql_query("SELECT username FROM user WHERE signup_date &gt;= '$today'");</pre>
<h3>EXPLAIN Your SELECT Queries</h3>
<h3>LIMIT 1 When Getting a Unique Row</h3>
<h3>Index and Use Same Column Types for Joins</h3>
<h3>Do Not ORDER BY RAND()</h3>
<h3>Avoid SELECT *</h3>
<p><span>t is a good habit to always specify which
columns you need when you are doing your SELECT&#8217;s.</span></p>
<h3>Use ENUM over VARCHAR</h3>
<h3>Use NOT NULL If You Can</h3>
<h3>Store IP Addresses as UNSIGNED INT (?)</h3>
<h3>Fixed-length (Static) Tables are Faster</h3>
<h3>Vertical Partitioning</h3>
<p><span>Vertical Partitioning is the act of splitting your table
structure in a vertical manner for optimization reasons.</span></p>
<p><strong><span style="font-family: 宋体;">Example
1</span></strong><span>: You might have a users table that contains
home addresses, that do not get read often. You can choose to split your table
and store the address info on a separate table. This way your main users table
will shrink in size. As you know, smaller tables perform faster.</span></p>
<p><strong><span style="font-family: 宋体;">Example
2</span></strong><span>: You have a &#8220;last_login&#8221; field in your
table. It updates every time a user logs in to the website. But every update on
a table causes the query cache for that table to be flushed. You can put that
field into another table to keep updates to your users table to a minimum.</span></p>
<p><span>But you also need to make sure you don&#8217;t constantly need to
join these 2 tables after the partitioning or you might actually suffer
performance decline.</span></p>
<h3>Split the Big DELETE or INSERT Queries</h3>
<p><span>If you have some kind of maintenance script
that needs to delete large numbers of rows, just use the LIMIT clause to do it
in smaller batches to avoid this congestion.</span></p>
<h3>Smaller Columns Are Faster</h3>
<h3>Use an Object Relational Mapper</h3>
<p><span>f you do not need the time component, use
DATE instead of DATETIME.</span></p>
<h3><span>Consider horizontally spitting many-columned tables if
they contain a lot of NULLs or rarely used columns.</span></h3>
<h3><span>Be an SQL programmer who thinks in sets, not procedural
programming paradigms</span></h3>
<h3><span>InnoDB can&#8217;t optimize SELECT COUNT(*) queries. Use counter
tables! That&#8217;s how to scale InnoDB.</span></h3>
<h3>Prefer MM with hive</h3>
<p>refer :</p>
<p><a href="http://blog.tuvinh.com/top-20-mysql-best-practices/">http://blog.tuvinh.com/top-20-mysql-best-practices/</a></p>
<img src ="http://www.blogjava.net/stephen80/aggbug/308270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2010-01-05 13:38 <a href="http://www.blogjava.net/stephen80/archive/2010/01/05/308270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql jdbc driver code browser</title><link>http://www.blogjava.net/stephen80/archive/2009/12/30/307741.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 30 Dec 2009 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/12/30/307741.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/307741.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/12/30/307741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/307741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/307741.html</trackback:ping><description><![CDATA[<br />
从时序图中可以看到，createNewIO()就是新建了一个com.mysql.jdbc.MysqlIO，利用 com.mysql.jdbc.StandardSocketFactory来创建一个socket。然后就由这个mySqlIO来与MySql服务器进行握手(doHandshake())，这个doHandshake主要用来初始化与Mysql server的连接，负责登陆服务器和处理连接错误。在其中会分析所连接的mysql server的版本，根据不同的版本以及是否使用SSL加密数据都有不同的处理方式，并把要传输给数据库server的数据都放在一个叫做packet的 buffer中，调用send()方法往outputStream中写入要发送的数据。<br />
<img src="http://www.blogjava.net/images/blogjava_net/stephen80/mysqljdbc.jpg" alt="" border="0" /><br />
<br />
useServerPreparedStmts置为true的话，mysql驱动可以通过PreparedStatement的子类ServerPreparedStatement来实现真正的PreparedStatement的功能<br />
<br />
<br />
<br />
<br />
第一位表示数据包的开始位置，就是数据存放的起始位置，一般都设置为0，就是从第一个位置开始。第二和第三个字节标识了这个数据包的大小，注意的是，这个大小是出去标识的4个字节的大小，对于非最后一个数据包来说，这个大小都是一样的，就是splitSize，也就是maxThreeBytes，它的值是 255 * 255 * 255。<br />
最后一个字节中存放的就是数据包的编号了，从0开始递增。<br />
在标识位设置完毕之后，就可以把255 * 255 * 255大小的数据从我们准备好的待发送数据包中copy出来了，注意，前4位已经是标识位了，所以应该从第五个位置开始copy数据<br />
<br />
&nbsp;# packetToSend = compressPacket(headerPacket, HEADER_LENGTH,&nbsp;&nbsp;&nbsp;&nbsp; <br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; splitSize, HEADER_LENGTH);&nbsp; <br />
<br />
LoadBalancingConnectionProxy <br />
package java.lang.reflect 。 proxy .<br />
<br />
<br />
http://developer.51cto.com/art/200907/137823.htm<br />
<br />
http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-implementation-notes.html<br />
<br />
<p>
PreparedStatements are implemented by the driver, as MySQL
does not have a prepared statement feature. Because of this,
the driver does not implement
<code class="function">getParameterMetaData()</code> or
<code class="function">getMetaData()</code> as it would require the
driver to have a complete SQL parser in the client.
</p>
<p>
Starting with version 3.1.0 MySQL Connector/J, server-side
prepared statements and binary-encoded result sets are used
when the server supports them.
</p>
<br />
<font size="3">但这是不是说PreparedStatement没用呢？不是的，PreparedStatement有其他的好处：<br />
1.代码的可读性和可维护性<br />
2.最重要的一点是极大地提高了安全性，可以防止SQL注入<br />
<br />
然后我又看了一些网上其他人的经验，基本和我的判断一致，有两点要特别提请大家注意：<br />
<br />
1.并不是说PreparedStatement在所有的DB上都不会提高效率，PreparedStatement需要服务器端的支持，比如在
Oracle上就会有显著效果。上面说的测试都是在MySQL上测试的，我找到了一个MySQL架构师的帖子，比较明确地说明了MySQL不支持
PreparedStatement。<br />
<br />
2.即便PreparedStatement不能提高性能，在少数使用时甚至会降低效率，但仍然应该使用PreparedStatement！因为其他好
处实在是太大了！当然，当SQL查询比较复杂时，可能PreparedStatement好处会更大，只是我没有测试，不敢肯定。<br />
<br />
3.既然PreparedStatement不能提高效率，那PreparedStatement Pool也就没有必要了。但可以看到每次新建Connection的开销实在很大，因此Connection Pool绝对必要。</font><br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/307741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-12-30 12:41 <a href="http://www.blogjava.net/stephen80/archive/2009/12/30/307741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>current vimrc</title><link>http://www.blogjava.net/stephen80/archive/2009/10/29/300152.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Thu, 29 Oct 2009 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/10/29/300152.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/300152.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/10/29/300152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/300152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/300152.html</trackback:ping><description><![CDATA[set nocompatible<br />
set autoindent<br />
set smartindent<br />
set ignorecase<br />
syntax enable<br />
set wrap<br />
set showmatch<br />
set foldmarker={{{,}}}<br />
set tabstop=4<br />
set shiftwidth=4<br />
set ruler<br />
set expandtab<br />
set backspace=eol,start,indent<br />
set whichwrap+=&lt;,&gt;,h,l<br />
set nobackup<br />
setlocal noswapfile<br />
set bufhidden=hide<br />
syntax on<br />
set tags=./tags,~/apsara/tags<br />
set path+=/usr/include/c++/**,~/apsara/include/**<br />
filetype plugin on<br />
filetype indent on<br />
autocmd filetype java,c,cpp setlocal textwidth=100<br />
set pastetoggle=&lt;F7&gt;<br />
<br />
nmap &lt;F2&gt;&nbsp; :set nonumber!&lt;CR&gt;<br />
nmap &lt;F8&gt;&nbsp; :TlistToggle&lt;CR&gt;<br />
imap &lt;F11&gt; &lt;C-x&gt;&lt;C-p&gt;<br />
map &lt;F12&gt;&nbsp; :!ctags -R --c++-kinds=+p --fields=+iaS --exclude=build --extra=+q .&lt;CR&gt;<br />
map &lt;F6&gt; :w&lt;CR&gt;<br />
imap &lt;F6&gt; &lt;ESC&gt;:w&lt;CR&gt;a<br />
map &lt;F3&gt; /&lt;C-R&gt;&lt;C-W&gt;&lt;CR&gt;<br />
<br />
有 c support 支持，很棒。<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/300152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-10-29 11:42 <a href="http://www.blogjava.net/stephen80/archive/2009/10/29/300152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ 指针 ,shared_ptr</title><link>http://www.blogjava.net/stephen80/archive/2009/10/27/299960.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 27 Oct 2009 10:54:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/10/27/299960.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/299960.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/10/27/299960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/299960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/299960.html</trackback:ping><description><![CDATA[<ol style="margin-left: 39pt;">
    <li>
    <br />
    避免对shared_ptr所管理的对象的直接内存管理操作，以免造成该对象的重释放<br />
    shared_ptr并不能对循环引用的对象内存自动管理（这点是其它各种引用计数管理内存方式的通病）。
    </li>
    <li>
    <br />
    不要构造一个临时的shared_ptr作为函数的参数。<br />
    如下列代码则可能导致内存泄漏：<br />
    <span style="font-size: 10pt;"><span style="color: blue; font-family: Courier Std;">void</span><span style="font-family: Courier Std;"> test()<br />
    {<br />
    &nbsp;&nbsp;&nbsp;&nbsp;foo(boost::shared_ptr&lt;implementation&gt;(<span style="color: blue;">new</span>&nbsp;&nbsp;&nbsp;&nbsp;implementation()),g());<br />
    }<br />
    </span>正确的用法</span>为<span style="font-size: 10pt;">：<span style="font-family: Courier Std;"><br />
    <span style="color: blue;">void</span> test()<br />
    {<br />
    &nbsp;&nbsp;&nbsp;&nbsp;boost::shared_ptr&lt;implementation&gt; sp&nbsp;&nbsp;&nbsp;&nbsp;(<span style="color: blue;">new </span>implementation());<br />
    &nbsp;&nbsp;&nbsp;&nbsp;foo(sp,g());<br />
    }</span></span></li>
    <li>
    <p><tt>Employee boss("Morris, Melinda", 83000);</tt></p>
    <p><tt>Employee* s = &amp;boss;</tt></p>
    <p>This is usually not a good idea. As a rule of thumb, C++ pointers should
    only refer to objects allocated wth <tt>new</tt>. </p>
    </li>
</ol>
<br />
copy:http://www.diybl.com/course/3_program/c++/cppjs/20090403/163770.html
<img src ="http://www.blogjava.net/stephen80/aggbug/299960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-10-27 18:54 <a href="http://www.blogjava.net/stephen80/archive/2009/10/27/299960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ 的linkage </title><link>http://www.blogjava.net/stephen80/archive/2009/10/27/299895.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Tue, 27 Oct 2009 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/10/27/299895.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/299895.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/10/27/299895.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/299895.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/299895.html</trackback:ping><description><![CDATA[抄录备忘：<br />
<font face="Verdana">其实没有.h也能很好的工作,但是当你发现一个外部链接的函数或外部变量,需要许多份</font>
<p><font face="Verdana">声明,因为c++这种语言,在使用函数和变量的时候,必须将他声明,为何要声明?声明之后才</font></p>
<p><font face="Verdana">知道他的规格,才能更好的发现不和规格的部分.你别妄想一个编译单元,会自动从另一个</font></p>
<p><font face="Verdana">编译单元那里得到什么信息,知道你是如何定义这个函数的.</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 所以说,只要使用到该函数的单元,就必须写一份声明在那个.cpp里面,这样是不是很麻烦,</font></p>
<p><font face="Verdana">而且,如果要修改,就必须一个一个修改.这真让人受不了.</font></p>
<p><font face="Verdana"><br />
.h就是为了解决这个问题而诞生,他包含了这些公共的东西.然后所有需要使用该函数的.cpp,只需要</font></p>
<p><font face="Verdana">用#include包含进去便可.以后需要修改,也只是修改一份内容.</font></p>
<p><font face="Verdana"><br />
请注意不要滥用.h,.h里面不要写代码,.h不是.cpp的仓库,什么都塞到里面.</font></p>
<p><font face="Verdana">如果在里面写代码,当其他.cpp包含他的时候,就会出现重复定义的情况,</font></p>
<p><font face="Verdana">比如将函数func(){printf}；放到头文件a.h,里面还有一些a.cpp需要的声明等；</font></p>
<p><font face="Verdana">然后你发现b.cpp需要用到a.cpp里面的一个函数,就很高兴的将a.h包含进来.</font></p>
<p><font face="Verdana">注意,#include并不是什么申请指令,他就是将指定的文件的内容,原封不动的拷贝</font></p>
<p><font face="Verdana">进来.</font></p>
<p><font face="Verdana"><br />
这时候实际上a.cpp和b.cpp都有一个func()函数的定义.</font></p>
<p><font face="Verdana">如果这个函数是内部链接static的话,还好,浪费了一倍空间；</font></p>
<p><font face="Verdana">如果是extern,外部链接(这个是默认情况),那么根据在同一个程序内不可出现</font></p>
<p><font face="Verdana">同名函数的要求,连接器会毫不留情给你一个连接错误!</font></p>
<p>http://www.cnblogs.com/shelvenn/archive/2008/02/02/1062446.html<br />
<br />
</p>
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/299895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-10-27 11:13 <a href="http://www.blogjava.net/stephen80/archive/2009/10/27/299895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理软件架构相关的知识</title><link>http://www.blogjava.net/stephen80/archive/2009/10/16/architecture.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 16 Oct 2009 05:13:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/10/16/architecture.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/298553.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/10/16/architecture.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/298553.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/298553.html</trackback:ping><description><![CDATA[&nbsp;一.&nbsp;&nbsp;&nbsp; Perspective and Metaphor <br />
<br />
<blockquote>Platform<br />
Kernel<br />
Framework<br />
</blockquote>
二.&nbsp;&nbsp;&nbsp; Philosophy and discipline <br />
<blockquote>Be aware of context <br />
Extreme maintenance <br />
Be pragmatic <br />
Extreme abstract: Program to an interface (abstraction), not an implementation <br />
&nbsp;&nbsp; <br />
Extreme separation of concerns<br />
Extreme readability<br />
Testability<br />
No side effect <br />
Do not repeat yourself<br />
</blockquote>
三.&nbsp;&nbsp;&nbsp; Principle<br />
<blockquote>DIP ，dependency inversion of control<br />
OCP , open close <br />
LSP , liskov substitute <br />
ISP , interface segregation <br />
SRP , single responsibility <br />
LKP, Lease knowledge principle<br />
</blockquote>
四.&nbsp;&nbsp;&nbsp; design pattern<br />
<blockquote>Construction<br />
Behavior<br />
Structure<br />
</blockquote>
<br />
五.&nbsp;&nbsp;&nbsp; anti-pattern、bad smell<br />
<blockquote>Long method<br />
Diverse change<br />
&nbsp;&nbsp;&nbsp; Repeated code<br />
&nbsp;&nbsp;&nbsp; Talk to stranger<br />
&nbsp;&nbsp;&nbsp; Pre optimize <br />
</blockquote>
六.&nbsp;&nbsp;&nbsp; algorithms<br />
<blockquote>&nbsp;nLongN <br />
&nbsp;Divided and conqueror <br />
</blockquote>
&nbsp;<br />
<br />
七.&nbsp;&nbsp;&nbsp; architecture<br />
<blockquote>Hierarchal<br />
Pipes and filter<br />
Micro kernel<br />
Broker<br />
Black Board<br />
&nbsp;&nbsp;&nbsp; Interpreter<br />
</blockquote>
&nbsp;&nbsp;&nbsp; <br />
八.&nbsp;&nbsp;&nbsp; Distributed &amp; concurrent<br />
<blockquote>What to concurrent <br />
<br />
Scalability <br />
&nbsp;&nbsp;&nbsp; Stretch key dimensions to see what breaks<br />
</blockquote>
九.&nbsp;&nbsp;&nbsp; languages<br />
<blockquote>Ruby<br />
Erlang<br />
assemble<br />
C<br />
C++<br />
Java<br />
Python<br />
Scala<br />
<br />
Be ware of different program paradigms.<br />
</blockquote>
十.&nbsp;&nbsp;&nbsp; Performance <br />
<blockquote>&nbsp;Minimize remote calls and other I/O<br />
&nbsp;Speed-up data conversion<br />
&nbsp;release resource as soon as possible&nbsp; <br />
</blockquote>
<br />
十一.&nbsp;&nbsp;&nbsp; architectures' future<br />
<blockquote>软件设计思想的发展逻辑，大致是提高抽象程度 ，separation of concern 程度。<br />
&nbsp;&nbsp;&nbsp; fn(design )=&nbsp; fn1(abstraction )+ fn2(separation of concern).<br />
<br />
由于大规模数据处理时代的来临，下一代设计范式的重点：<br />
1.&nbsp;&nbsp;&nbsp; 将是如何提高distributed(--concurrent) programing 的抽象程度 和 separation of concern 程度。<br />
2.&nbsp;&nbsp;&nbsp; dsl ，按照以上的公式，也确实是一个好的方向。<br />
</blockquote>
十二.&nbsp;&nbsp;&nbsp; Reference<br />
<blockquote>&lt;art agile software development&gt;<br />
&lt;prerefactor&gt;<br />
&lt;design patterns&gt;<br />
&lt;beautiful architecture&gt;<br />
&lt;refactor&gt;<br />
&lt;pattern oriented software architecture&gt;<br />
&lt;extreme software development&gt;<br />
&lt;beautiful code&gt;<br />
&lt;patterns for parallel programming&gt; <br />
&lt;java concurrent programming in practice&gt;<br />
&lt;java performance tuning&gt;<br />
&lt;the definite guide to hadoop&gt;<br />
&lt;greenplum&gt;<br />
&lt;DryadLINQ&gt;<br />
&lt;software architecture in practice&gt;<br />
&lt;97 things architecture should known&gt;<br />
http://en.wikipedia.org/wiki/Programming_paradigm <br />
</blockquote>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/298553.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-10-16 13:13 <a href="http://www.blogjava.net/stephen80/archive/2009/10/16/architecture.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 安装字体</title><link>http://www.blogjava.net/stephen80/archive/2009/08/14/291185.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Fri, 14 Aug 2009 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/08/14/291185.html</guid><description><![CDATA[拷贝<br />
mingliu.ttc&nbsp; simsun.ttf&nbsp; SURSONG.TTF&nbsp; tahomabd.ttf&nbsp; tahoma.ttf&nbsp; verdanab.ttf&nbsp; verdanai.ttf&nbsp; verdana.ttf&nbsp; verdanaz.ttf<br />
<br />
&nbsp;#mv simsun.ttc /usr/share/fonts/local/simsun.ttf<br />
#cd /usr/share/fonts/local/<br />
sudo mkfontscale<br />
sudo mkfontdir<br />
<br />
sudo fc-cache<br />
cp fonts.scale fonts.dir<br />
sudo chmod 755 * <br />
sudo chkfontpath --add /usr/share/fonts/local/ <br />
<br />
#/etc/init.d/xfs restart<br />
查检是否安装成功<br />
<br />
fc-list |grep Sim<br />
<br />
&nbsp;NSimSun:style=Regular<br />
SimSun:style=Regular<br />
SimSun\-PUA:style=Regular<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/291185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-08-14 17:48 <a href="http://www.blogjava.net/stephen80/archive/2009/08/14/291185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java performance </title><link>http://www.blogjava.net/stephen80/archive/2009/07/22/287892.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Wed, 22 Jul 2009 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/07/22/287892.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/287892.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/07/22/287892.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/287892.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/287892.html</trackback:ping><description><![CDATA[experience learned.<br />
<br />
1. first think algorithm before concurrent<br />
2. first solve top problem<br />
3. memory can be problem with huge data processing<br />
4.&nbsp; not to use refletion frequently<br />
5. prefering strategy that can optimize both cpu and memory .<br />
<br />
technical <br />
1. thread synchronizing is how to queuing<br />
&nbsp;&nbsp; be sure to use "while(!Thread.currentThread.isInterupted())<br />
<br />
2. prefer high level&nbsp; synchronizing facility to low level methodology such as await,notify<br />
<br />
3. dedicated sorter is much faster<br />
<br />
<br />
&nbsp; <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/stephen80/aggbug/287892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-07-22 18:07 <a href="http://www.blogjava.net/stephen80/archive/2009/07/22/287892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>software architecture's future</title><link>http://www.blogjava.net/stephen80/archive/2009/07/13/286540.html</link><dc:creator>西津渡</dc:creator><author>西津渡</author><pubDate>Mon, 13 Jul 2009 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/stephen80/archive/2009/07/13/286540.html</guid><wfw:comment>http://www.blogjava.net/stephen80/comments/286540.html</wfw:comment><comments>http://www.blogjava.net/stephen80/archive/2009/07/13/286540.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/stephen80/comments/commentRss/286540.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stephen80/services/trackbacks/286540.html</trackback:ping><description><![CDATA[以前听过用友的牛人关于软件设计范型的时代划分，记得不太准确，不过基本上是业界公认的。<br />
大致上是：过程式、面向对象、组件、面向服务。<br />
未来呢？我忘记了，抑或是 dsl ？<br />
<br />
我以往也没有自己的认识，不过，最近我有自己的看法<br />
<br />
软件设计思想的发展逻辑，大致是提高抽象程度 ，seperation of concern 程度。<br />
&nbsp;&nbsp;&nbsp; fn(design )=&nbsp; fn1(abstraction )+ fn2(seperation of concern).<br />
<br />
<br />
由于大规模数据处理时代的来临，下一代设计范式的重点：<br />
<br />
<ol>
    <li>将是如何提高concurrent programing 的抽象程度 和 seperation of concern 程度。</li>
    <li>至于dsl ，我研究不多，不过，按照以上的公式，也确实是一个好的方向。</li>
</ol>
<br />
对于英文词语的使用，是因为，我想更能表达我的意思，不至于误解。见谅。<br />
欢迎批评指正！
<img src ="http://www.blogjava.net/stephen80/aggbug/286540.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stephen80/" target="_blank">西津渡</a> 2009-07-13 12:33 <a href="http://www.blogjava.net/stephen80/archive/2009/07/13/286540.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>