2013年7月29日 星期一

Google AdWords 認證考試分享

這個認證計畫主要是讓使用者能對網路行銷有進一步的了解,由網路行銷的領導品牌Google AdWords來做認證。

相關介紹:官方介紹頁1111人力銀行介紹頁 (說明文件)

其實,這次主要是參加「Google AdWords Challenge 活動」然後去上了兩天的密集培訓課程......說真的挺累的,一天五個小時,上完馬上考兩個小時的試。

在這邊跟大家分享一些上課的重點整理,和考試的小叮嚀。

Google AdWords 基本考試:文件檢視

Google AdWords 進階考試(搜尋聯播網):文件檢視

基本考試,其實只要一些基本名詞有讀熟,就會通過 85% 門檻,然後AdWords說明中心的內容有看熟就可以了。(總共95題。120分鐘)

進階考試(搜尋聯播網),裡面考了一些很活用的實際案例,和一些真實的計算題(雖然我放掉了幾題),然後很著重各項的工具介紹,所以每個工具在做什麼,一定要很熟,並且在廣告操作上,建議每個分頁都去點點看,或者自己實際去創建一個廣告熟悉一下,還有下載AdWords編輯器來實際操作看看。(總共100題。120分鐘)

然後以下是一些重點內容:

Google 認證計劃學習中心  連結
網上小學堂  連結 (這邊的每個影片都看看吧!會對實際操作有不錯的了解)
詞彙解釋  連結 (這邊的每個名詞,一定要讀熟,因為考題有時會問他們的定義)
入門手冊 連結
考題範例  連結

最後小叮嚀,由於AdWords考試是可以翻閱紙本文件和筆記的,但是依照經驗,如果每一題都翻翻找找,兩個小時其實會翻不太完,畢竟題目有點多,但是有不確定的幾題再來翻翻的話,時間上是允許的。還有AdWords考試是要用專門的瀏覽器,考試期間會佔住所有視窗,可別想做其他事啊~~~

2013年5月6日 星期一

[Android][JAVA] Android 與 PC JAVA 間的 Socket 連線(Android Client Java Server)

要讓 Android 與一般的 Java 程式透過網路溝通,我們最習慣的是使用 Socket 來做連線,而使用一般的 java 寫法可能會發現無法建立連線。

因為兩端皆須透過 Thread 使用額外的執行緒來處理建立連線這塊,可以參考以下的做法:

(本範例僅供連線通訊端的程式碼,並無做加密的控制)





Android Client

package com.example.androidclient;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

 static EditText ed;
 static TextView tv1,tv2;
 static Button btn ;
 static String str1="0",str2="0";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //先建立好與XML的元件連結
        ed = (EditText) findViewById(R.id.edt);
        tv1 = (TextView) findViewById(R.id.show01);
        tv2 = (TextView) findViewById(R.id.show02);
        btn = (Button) findViewById(R.id.btn);
        //撰寫一個按鈕事件,當按下按鈕時,才啟動一些功能
        btn.setOnClickListener(new OnClickListener() 
        {public void onClick(View arg0) 
  {
         //建立 thread 的物件
         Thread t = new thread();
            //啟動thread
         t.start();
            try {
             //先讓他等待個 3 秒
       t.sleep(3000);
      } catch (InterruptedException e) {}
            //之後在讓它顯示在銀幕上,有時網路不夠穩時,傳輸會較慢,而導致傳誦與接收都尚未完成,便顯示到銀幕上了
            tv1.setText(str1);
            tv2.setText(str2);
  }});    
    }
    class thread extends Thread{
     public void run() {
      try{
      System.out.println("Waitting to connect......");
      String server=ed.getText().toString();
      int servPort=1025;
      Socket socket=new Socket(server,servPort);
      InputStream in=socket.getInputStream();
      OutputStream out=socket.getOutputStream();
      System.out.println("Connected!!");
      byte[] rebyte = new byte[18];
      in.read(rebyte);
      str2 ="(Client端)接收的文字:"+ new String(new String(rebyte));
      String str = "android client string";
      str1 = "(Client端)傳送的文字:"+str;
      byte[] sendstr = new byte[21];
      System.arraycopy(str.getBytes(), 0, sendstr, 0, str.length());
      out.write(sendstr);
      }catch(Exception e)
      {
       System.out.println("Error: "+e.getMessage());
      }
      }
    }
}




Java Server

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class jSer extends Thread {

    public static void main(String[] argv) {
        Thread t = new thread(); 
        t.start(); 
        }
    }

class thread extends Thread{
 public void run() {
  try{
  System.out.println("Waitting to connect......");
  ServerSocket servSock=new ServerSocket(1025);
  Socket clntSock=servSock.accept();
  InputStream in=clntSock.getInputStream();
  OutputStream out=clntSock.getOutputStream();
  System.out.println("Connected!!");
  String str = "java server string";
  System.out.println("(Server端)傳送的字串:"+str);
  byte[] sendstr = new byte[18];
  System.arraycopy(str.getBytes(), 0, sendstr, 0, str.length());
  out.write(sendstr);
  
  byte[] re = new byte[21];
  in.read(re);
  String s = new String(re);
  System.out.println("(Server端)接收的字串:"+s);
  }catch(Exception e)
  {
   System.out.println("Error: "+e.getMessage());
  }
  }
}



專案檔下載:file

2013年4月11日 星期四

[JAVA] Sun JAVA 認證考試官方教材 (Oracle適用)

全名:Sun Certified Java Programmer
簡稱:SCJA (後改 OCPJA) 
官方教材:SL-110
及格分數:(我不知道QQ)
心得:其實這張可以不用考,它裡面僅包含基礎概念。

全名:Oracle Certified Professional Java Programmer
原名:SCJP (後改 OCPJP)
官方教材:SL-275
及格分數:61%
心得:這張是普遍業界面試門檻的證照,考試內容涵蓋整個JAVA SE 的內容,還蠻扎實的。

全名:Sun Certified Web Component Developer
原名:SCWCD (後改 OCWCD)
官方教材:SL-314
及格分數:72%
心得:(還沒去考) 這張主要是進階考試,需要有SCJP才可參與此考試,內容涵蓋到JAVA EE & Servlet 的內容。

----------------------2014.03.01更新----------------------

  在昨天(2/28)考完OCPJWCD,簡單的分享一下

  這張認證老實說沒有特別的難(相較於OCPJP),畢竟他的內容主要侷限於網頁這塊領域,相較於OCPJP的內容,就比較廣了,從程式邏輯到檔案I/O都有。麻煩的是OCPJWCD的進階考試,及格分數比OCPJP高一些,72%及格,所以要讀熟一點倒是真的。

2013年4月8日 星期一

[Android] Candy Crush 愛心用不完~

從 Facebook 蔓延要手機平台的火紅遊戲:Candy Crush !!!

只是它有些限制,如果沒有愛心了,就要在稍等一些時間才能繼續玩下去了,挖勒QQ

不過之前和同學討論後,它仍有一些正常程序的漏洞 =______=+


APP名稱:Candy Crush Saga
費用:免費應用程式
Google Play 資訊:連結



以下供大家參考看看:

Step1:
愛心沒有了,還要等十分鐘才能玩,那麼來作弊一下吧,嘿嘿!
























Step2:
先到「設定」的「應用程式」裡面,找到「Candy Crush Saga」這支程式。
將它強制停止。(其實就是在停止它背後的計時執行序)
























Step3:
來到時間設定這邊,先把「網路校時」的功能取消,手動去設定時間。























Step4:
往後調大概三個小時多即可。(半小時一顆愛心)













































Step5:
回到遊戲,即可回到五顆全滿的狀態。























補充:
平時調的時候,僅需要把時間往後調即可,可先不用到「設定」>「應用程式」將「Candy Crush Saga」強制停止,除非真的失效,才需要將它停止。
(這支程式防作弊的功能沒有寫在這邊。不過它移動步數的數值,有防作弊去修改它,所以還是乖乖玩就好,哈哈)







2013年4月6日 星期六

TQC+ 物件導向程式語言 (Java6) 考試心得分享

筆者從 2012.04 開始學JAVA歷經了一年的時間,期間不免想測試一下自己的學習效果。

於是在 2012.10 去參與了第一次的TQC+ JAVA6考試,那時真的是太小看它了,它的考題真的是很活耶!!跟題庫的題目真的是「 不 太 一 樣 耶 !!」,連難度真的也不太一樣O_Q

於是那次的考試大概解一半的題目就沒時間了,也是因為那次讓筆者有動力來撰寫解題密技


經過了幾個月後,筆者突然需要JAVA的證照(原本不太想考的說,就是怕沒準備好),於是在2013.03再度去挑戰,也在前幾天成績揭曉了,可真是開心啊~沒有白白投資了。不過這次在準備的過程中,翻到之前寫的code......這是啥= ="

砍 掉 重 練 比 較 快  !! 這 解 法 .......(delete......)

大概跟大家分享一下兩次的考試有哪些題號有出現(題目只能說跟題庫類似,但解法不一定一樣)

2012.10:

110 考試改成計算Android 人偶的面積。
209 沒什麼改。
30x (忘了)
402 數字不一樣。(那時筆者還不知道什麼是遞迴,就用迴圈解了,當然,錯!)
50x (忘了)
604 當時只解到它的第二小題,就沒時間了QQ

2013.03:

104 原本是算使用者輸入的兩個座標距離,考試會提供第三個座標(1,1)並個別到該點的距離,並比較誰比較遠。
210 指示輸入的字元不同罷了。
303 沒什麼改。
401 沒什麼改。(考卷題目答案有錯= =)
508 未排序的陣列數字不一樣,請確定排序的方法任何數據皆可用。
604 還真幸運,又是這題,但是這題請小心,它算較為偏難的題目,整題的數據跟題庫完全不一樣,方法會有不同,並且注意 double 和 int 之間轉換時,小數點造成的誤差。

寫完加檢查完,大概還有3分鐘多一點。

結論:請把書本題庫的難度 x1.5倍看待吧~然後基本上,題庫分類為易的,好像沒什麼考耶!!

2013年4月5日 星期五

[JAVA] 字串 相加 相減

在JAVA中,我們要將兩個字串相加是非常容易的事情,僅需要一個「+」號便可將兩個字串串起來,但字串要相減可沒這麼容易。

我們可以利用 substring 這個方法來達到相減的效果


public class stringaddsub {

 public static void main(String[] args)
 {
  String a = "I am living ";
  System.out.println("A字串內容:"+a);
  String b = "in Taipei.";
  System.out.println("B字串內容:"+a);
  String a_add_b = a+b;
  System.out.println("A+B字串內容:"+a_add_b);
  
  //要減掉的部分在前面的做法
  //利用substring擷取a字串長度後的字串
  String a_add_b_sub_a = a_add_b.substring(a.length());
  System.out.println("\nA+B字串 減 A字串:"+a_add_b_sub_a);
  
 
  //要減到的部分在後面的做法
  ////利用substring擷取從 0 到 a字串的字串
  String a_add_b_sub_b = a_add_b.substring(0,a.length());
  System.out.println("\nA+B字串 減 B字串:"+a_add_b_sub_b);
 }
}



JAVA檔下載:file

2013年3月8日 星期五

[JAVA] 隨機長度的陣列

  在製作密碼學的程式時,最常遇到的功能不免是加密與解密,但是其實加密時有時為了其安全性,每次產生的byte[]陣列長度不一定會一樣,所以在程式碼裡面,我們無法將他的陣列長度寫死。

以下介紹此方法,可以彈性的存儲陣列與還原陣列:

public class debyte {

public static void main(String[] args)
{
 String str1 = "qwertyuiop3456";
 //假設這個字串每次產生出來byte[]陣列長度每次都不同
 byte[] byt1 = str1.getBytes();
 //我們先取得他的長度(此方法較為彈性,這樣可以每次皆取得該陣列的長度)
 int byt1LN = byt1.length;
 //我們先來宣告一個較長的陣列
 byte[] solongbyte = new byte[5000];
 //然後將byt1陣列寫入這個陣列中(我們從位置0開始寫),長度也一併寫進去(我們從位置4900開始寫)
 System.arraycopy(byt1, 0, solongbyte, 0, byt1LN);
 //先把長度值轉換成byte[]寫入
 System.arraycopy(String.valueOf(byt1LN).getBytes(), 0, solongbyte, 4900, String.valueOf(byt1LN).getBytes().length);
 
 System.out.println("======還原測試======");
 //還原方法參數介紹:原文的第一個位置,原文長度的第一個位置,要解開的陣列
 byte[] backtest = getB(0,4900,solongbyte);
 System.out.println(new String(backtest));
}

//ini起始讀取值得位置,ls讀取該數值長度的起始位置,byte[]要拆解的陣列
public static byte[] getB(int initial,int ls,byte[] Len400)
{
 int pl=0;
 int le = ls +5;
 for(int i=ls;i<le;i++)
 {
  int temp = (int)Len400[i];
  if(temp == 0)
  {
   pl=i;
   break;
  }
 }
 pl = pl - ls;
 byte[] plb = new byte[pl];
 System.arraycopy(Len400, ls, plb, 0, pl);
 int reback_plen = Integer.parseInt(new String(plb));
 byte[] backp = new byte[reback_plen];
 System.arraycopy(Len400, initial, backp, 0, reback_plen);
 return backp;

}
}


JAVA檔下載:file