All is Possible :)

All is possible!


Leave a comment

udemy: Ace Your Coding Interview & Land Your Dream Programming Job

udemy-logo-academyofyou

Online Course를 찾아보던 중에 발견한 사이트. Udemy

여러 사이트들이 있는데, 내가 원하는 Course가 있는 사이트. (다른 Online Course들도 많은데, 더 알아보기!)

그리고 바로 구입한 “Ace Your Coding Interview & Land Your Dream Programming Job”

다행이 아래 링크를 통해서 들어가면 25$ 밖에 안함. http://codingforinterviews.com/blog/

오늘부터 100% 수강이 될 때까지, 공부하면서 정리하도록 하자!

그리고 강의 참고물들도 꼼꼼하게 보면서 내 것으로 만들 수 있도록!

오늘 내용 정리:

  • Establishing an Online Presence
    • Linkedin : Ask for recommendations as you leave positions
  • Choosing a Programming Language for Interviews
    • If you’re going with Java, for example, and applying to Amazon, where Java is used heavily, consider reading through some of the best practices material.
    • Amazon: Java, Javascript, Ruby, Python, Perl (http://goo.gl/Il9xa9)

수업 내용 중 기억에 남는 말들:

“You should plan on working 60 hours per week. The first 40 are for your employer. The remaining 20 are for you. During this remaining 20 hours you should be reading, practicing, learning, and otherwise enhancing your career.” – “Uncle” Bob Martin, author of Clean Code

  • Section6 Data Structures
    • Linked Lists, Arrays, BST, Tries
    • Hash Table Problem 1. Ransom note
      • public boolean canRansom(String ransom, String magazine);
  • Section7 Algorithms
    • Tree Traversals
      • DST : 스택 이용 또는 recursive function
        • preorder : Tree를 copy데 사용
        • inorder : BST를 특정 순서로 출력하는데 사용
        • postorder
      • BST : 큐 이용
      • Grapsh와 Tree의 차이점 : Cycle 존재 여부, 때문에 visit 할 때 visit 여부를 체크해야 한다
    • Sort : Merge Sort, Quick Sort
  • Section8 Algorithmic Problem Solving
    • Recursion : Divide and Conquer
      • 1) Sub problem breakdown : 몇 개의 step으로 나눠지는지
      • 2) base case : null, empty 체크 등
      • recursively defined data structures : BST, Linked list
      • Approach : Bottom-up, Top-down
      • recursive vs iterative
        • speed 안 좋음, overhead 존재
        • space 많이 필요
        • repeating work -> dynamic programming
      • Examples :Fibonacci
    • Dynamic Programming
      • Recusive한 방법을 memoization을 통해 dynamic으로 해결 할 수 있다
    • Bit Manipulation : And, OR, XOR, NOT, LEFT SHIFT, RIGHT SHIFT
  • Section9 Design Patterns and Architecture
    • Singleton, Factory
  • Section10 Software Concepts
  • Section11 Quick Wrap up


Leave a comment

간결하고 효율적인 안드로이드 앱의 구조와 개발 전략 북마크

오늘은 지난 9월에 있었던 DEVIEW 2014 중에서 도움되었던 세미나를 공유하려고 합니다.
세미나 내용은 아래 링크에서 확인 할 수 있습니다.
http://deview.kr/2014/session?seq=41
https://github.com/naver/DEVIEW2014_AndroidApp_Demo/blob/master/Deview/src/com/nhn/android/deview/core/transfer/BundleMapper.java

좋은 내용들이 많지만, 아직 이해 못한 부분이 많습니다.
이 중에서 지금 바로 안드로이드 앱에서 유용하게 쓰일 만한 두 가지를 적용해보았습니다.

1) Resource Id Mapping 최적화 : Annotation과 Mapping 을 이용하여 OnClickListener 최소화
2) BundleMapper를 이용한 간결화 : Annotation을 이용하여 키 맵핑 최소화

1) Resource Id Mapping 최적화

다음의 코드처럼,  findViewById()를 이용하여, Resource 를 찾고, OnClickListener를 등록하는 과정을 거칩니다.
이렇게 하면 Activity 코드가 커지고, 깔끔하지 못한 부분이 있었습니다.
이를 @DeclareView라는 Annotation과, ViewMapper에 정의된 Refection을 이용하면 다음처럼 깔끔하게 할 수 있습니다.
코드가 깔끔하게 정리되어서 좋습니다.

1a5-140927232721-phpapp02 (3).pdf 2014-10-31 13-26-52

사실 아직 내공이 많이 부족하기에, 이를 직접 구현하지 못한다는 것과, 생각조차 해보지 못했다는 한계가 있습니다.
아직 내부적으로 어떻게 구현되었는지, 어떤 기능을 이용하였는지는 제대로 파악 못한 상태입니다.

단순히 공개된 코드를 어떻게 활용 할 수 있는지 정도만 확인하였습니다.

2) BundleMapper를 이용한 간결화

Activitiy 간에 데이터를 전달하기 위해서 Intent를 이용합니다.
아래 설명된 슬라이드처럼 intent.putExtra()를 이용하는데, 매번 name 을 입력해야 합니다.
name은 대소문자를 구분하기 때문에, 각 Acitivity 마다 해당 name을 선언하는 등의 불편한 점이 여럿 있었습니다.
1a5-140927232721-phpapp02 (3).pdf 2014-10-31 13-34-13image (1)
이를 좀 더 쉽게 할 수 있는 방법으로, 세미나에서는 BundleMapper를 소개했습니다.
예제 소스를 확인해 본 결과, BundleMapper.fromIntent() 를 통해서 각각의 name 을 입력하면서 getExtra()를 할 필요는 없지만,
슬라이드에서 소개된 BundleMapper.toBundle() 은 제대로 동작하지 않았습니다.
(현재 저자에게 문의한 상태이고, 제 스스로 해결하면 좋은데, 아직 해결하지는 못하였습니다.)
여기에서 주의해야 할 점은, Intent에 넣은 변수들이 public으로 정의되어야 한다는 것입니다.
그래야 fromIntent()에서 접근 할 수 있습니다. 최초에 private를 선언하여 안되었는데, 그러면 getField 함수에서 NoSuchFieldException 이 발생합니다.

http://stackoverflow.com/questions/15420968/nosuchfieldexception-when-field-exists

According to the javadoc, Class.getField() “Returns a Field object that reflects the specified public member field of the class or interface represented by this Class object”. Use getDeclaredField() if you want to access non-public fields.

이렇게 1), 2)를 확인한 예제를 공유합니다.
https://github.com/hyogij/Android-Projects/tree/master/EfficientAppExample

아직 많은 부분이 부족하지만, 이렇게 하나씩 하나씩 공부하면서 어떻게 하면 깔끔하고 효율적인 안드로이드 또는 프로그램을 설계 할 수 있을까, 구현할 수 있을까 고민하려고 합니다.

좋은 내용 있으면 또 공유하겠습니다.


Leave a comment

조성문의 Spin it(스핀 잇), 조성문의 실리콘밸리 이야기

SpinIt

(출처 : http://www.yes24.com/24/Goods/10850595?Acode=101)

 

예전에 조성문 님의 블로그를 보면서, 책도 쓰셨다고 하길래 설레는 마음으로 산 책이다.

 

예전에 틈틈히 대부분의 내용을 읽어 주요 내용은 잘 기억이 나지 않는다.

하지만, 책에 나와있는 현재 실리콘벨리의 새로운 스타트업 회사들을 많이 소개해주셨다.

특히, AirBnb나 uber 등도 이 책을 통해 알게되었는데, 정말 흥미롭고 새로운 시장을 여는 서비스라는 것을 알게 되었다.

 

몇 가지 괜찮은, 감명깊게 읽은 부분을 정리한 후에, 이 책을 읽고 난 느낌을 정리하려 한다.

– 한국 회사에서의 역할 구분 : ‘ 기획자’, ‘디자이너’, ‘개발자’

이렇게 하면 역할분담은 확실히 되겠지만, 창의력과 기회를 제한하는 부작용을 피하기 어렵다. 소위 기획자가 100장짜리 기획문서를 만들고, 디자이너와 개발자가 문서를 검토해 기획이 허점을 지적하고, 기획자가 다시 문서를 정리하는 식의 사이클을 밟게 되면, ‘놀라운’ 제품보다는 ‘무난한’ 제품이 나올 확률이 높다.

그보다는 디자이너가 직접 개발까지 해서 프로토타입을 만들어보거나, 개발자가 디자인까지 하게 되면 ‘감’이 확 온다. 손에 만져지는 프로토타입이 있으면 그것을 개선할 아이디어가 쉽게 나오고, 당연히 제품은 더 좋아진다.

-> 엔지니어의 역할에 대한 글이다. 위 말처럼 단순히 기획자가 의도한 대로 개발하는 것은 재미없다. 그냥 그들이 원하는 무난한 제품을 만들어 내는 것 뿐이다. 하지만 엔지니어들이 주요 의사결정 과정에 참여하고, 목소리를 낼 수 있다면 더 혁신적 제품을 만들 수 있지 않을까?

– 무엇이 직원들에게 동기를 부여하는가

“일의 진행을 가로막는 것이 무엇인지 자세히 살펴보아야 한다. 목표를 분명하게 설정하고, 너무 작은 일에 매달리게 해서 시간을 빼앗지 말고, 사람들이 서로 도움을 주는 문화를 조성해야 한다. 직접 뛰어들어 문제를 해결하는 것도 좋다.”

동기 유발에 관한 TED 동영상 :

-> 팀장이 된다면, 팀원들의 하루 업무를 메일로 받아보는건 어떨까? 업무 관련해서는 간단히 정리하고, 기타 하고 싶은 말들을 한다면 조금 더 서로의 업무를 파악하고, 진행 상황을 더 잘 알 수 있지 않을까?

주요 내용은 그 날 있었던 일, 무엇이 자신에게 동기부여를 했는지, 어떤 일을 기분 좋게 했는지 등을 간략하게 적고, 마지막에 그 날의 기분을 표현하는 작은 이모티콘을 고르도록 한다.

– 행정고시에 합격 한 후, 이를 중단한고 스탠포더 MBA 진학한 백산 씨의 블로그 내용

Mentorship 진로상담, 특히 고시나 공기업에 대해 상담하는 후배들에게 해주고 싶은 말

– 남들이 제시하는 성공보다는 자신이 생각하는 성공의 방식을 스스로 만들어나가고 있다.

– 영어에 자신감을 갖기 위해서는 많은 시간과 인내가 필요하겠지만, 자신만의 방식으로 꾸준히 하다 보면 언젠가 그 시간이 결코 아깝지 않음을 알게 된다. 영어를 공부의 대상으로 여기지 말고, 인생을 지금보다 더 풍요롭고 재미있게 살 수 있도록 도와주는 도구로 생각하면 배우고 익히는 과정이 좀 더 들거워질 것이다.

-> 조금 더 열심히 영어 공부를 해야 한다.

 

http://sungmooncho.com/


Leave a comment

Software Engineer Interview 준비 내용

G 사 등의 Software Engineer Interview 를 준비할 때 참고한 내용입니다.

 

1. 기본 교과목 정리 : 자료구조, 알고리즘, OOP, 운영체제 등

 

2. 책 또는 PDF 자료 공부
 – Programming Interviews Exposed
 – Cracking the coding interview
 – Hacking a Google Interview : MIT CS course (http://goo.gl/qWqM8)

 

3. 웹사이트 이용
– careercup
– LeetCode

 

4. 참고 사이트
– 기술면접블로그(준용이형) : http://crack-tech-interview.com/
– 구글 지원방법 및 채용절차: http://www.youtube.com/watch?v=XQpFgkPj-eE&feature=youtu.be

 

 ————————————————————

 

처음엔 이런 면접을 잘 몰랐기 때문에, 아래 2개 책 위주로 봤습니다. (한글 번역번도 있습니다.)
 
 – Programming Interviews Exposed
 – Cracking the coding interview
 
그리고 다음 사이트(careercup, projecteuler.nettopcoder.com)보다는 geeksforgeeks 여기가 더 정리가 잘되어 있어서 공부하는데 많이 도움 되었습니다.
(개인 취향에 따라 다를 수 있습니다)
대부분 회사들 인터뷰 내용이 비슷하니 http://www.geeksforgeeks.org/tag/microsoft/ 이걸 가지고 정리했습니다.
양이 좀 많긴한데(중복되는 내용도 많구요), 올해 준비할 때는 시간이 좀 많아서 전체적으로 정리했습니다.

 

그리고 이건 아시는 분이 운영하는 기술면접블로그인데 (http://crack-tech-interview.com/) 계속 업데이트되고 있어서 많이 도움 되었습니다.
최신 기출 문제도 얻을 수 있었고, 궁금한거 물어보면 자세히 알려주셔서 많은 도움 되었습니다.
geeksforgeeks 여기는 내용이 많으니 crack-tech-interview 를 먼저 보셔도 될 꺼 같습니다.

 

그리고 온사이트 가기 전에 mock interview를 하시는 것도 중요한거 같습니다.
실제 이런 경험이 많으신 분들에게 부탁 드리면 좋지만,  그게 아니더라도 실전처럼 인터뷰 연습을 했던게 도움이 된거 같습니다.

 

제가 준비한 과정을 간단히 적었는데, 궁금한거 있으시면 댓글이나 메일 주세요.

 

그리고 제가 준비하면서 정리한 내용 중에 하나를 아래에 적어두었습니다.


Leave a comment

Android Developer console 기기 호환성 체크/해제 간단하게 하는 방법

1. 불편한 사항

아래와 같이 Android Developer console 에 배포한 APK를 올리면, 지원되는 기기를 확인 할 수 있다.

하지만, 여기에서 특정 단말기만 허용하기 위해서는 설정된 단말기를 모두 해제하거나, 체크해야 한다.

여기에서 불편한 사항은 체크 박스를 한꺼번에 체크하거나 해제 할 수 없다는 것이다.

제조사 별로 모아 두었기에, 제조사 별 전체해제/선택이라도 있으면 좋을 법한데, 그게 없어서 불편하다.

그렇다고 5000개 되는 단말기를 확인하면서 하나 하나 체크/해제하기에는 시간이 오려걸리고 단순한 일이기에 짜증이 날 법하다.

(이와 관련해서, AndroidManifest.xml 을 이용하면 단말기의 속성으로 몇 가지 지원 가능 기기를 제어 할 수 있다.)

APK - 대구은행 DGB스마트뱅크 - Google Play Developer Console 2014-10-23 17-13-11

APK - 대구은행 DGB스마트뱅크 - Google Play Developer Console 2014-10-23 17-14-21

2. 해결책

보여지는 단말기를 한꺼번에 체크하거나 해제 할 수 없을까?

관련 내용을 구글에서 찾아보니 아래와 같은 질문을 stackoverflow에서 찾을 수 있었다. (역시 검색의 힘은 대단하다!)

내용을 살펴보면,


http://stackoverflow.com/questions/9510649/how-to-restrict-android-app-to-specific-device-make

In the Supported Devices section of the developer console page, you can view the list of all devices. This loads over 2,000 slider-type checkboxes which are initially set to enabled. Unfortunately there doesn’t seem to be a “disable/enable all” option in the interface…

…Instead, I used Firebug’s inspector tool to get the classname for these slider objects (can’t recall what it was now – two random uppercase acronyms), then executed an expression in the Javascript console which toggled the state of every slider. Something like:

switches = document.getElementsByClassName(“ABC DEF”); for(i = 0; i < switches.length; i++) switches[i].click();

This froze the browser for a minute or two, but afterwards, every phone was marked as unsupported. Then you can enable the phone(s) you need to support.


3. 실행 방법

크롬을 이용하기에, 크롬 개발자 도구를 이용하여, 해당 체크 박스의 태그를 찾는다.

아래와 같은 코드를 확인 할 수 있었다.

<li data-device-id=”acer_aprilia” aria-hidden=”false”><checkbox class=”GGKNGQWECB GGKNGQWFCB” role=”checkbox” tabindex=”0″ aria-checked=”false” aria-disabled=”false” aria-readonly=”false” id=”gwt-uid-1346″><span class=”GGKNGQWPBB”></span></checkbox><label for=”gwt-uid-1346″><span data-product=””>A1-713</span><span data-device-name=””>– acer_aprilia</span></label></li>

여기에서 checkbox의 class 명은”GGKNGQWECB GGKNGQWFCB” 이라는 것을 확인 할 수 있었다.

이 값을 위에서 보여준 코드에 삽입하면 된다. 아래와 같고, 이를 개발자 도구를 이용하여 실행하면 된다.

switches = document.getElementsByClassName(“GGKNGQWECB GGKNGQWFCB”); for(i = 0; i < switches.length; i++) switches[i].click();

APK - 테스트 - Google Play Developer Console 2014-10-08 15-25-31

[체크 박스 태그 확인]

APK - 테스트 - Google Play Developer Console 2014-10-08 15-25-48

[console을 이용한 자바스크립스 실행]


Leave a comment

Google Play Store APK 자동 올리기 : android-play-publisher-api

  1. 관련 파일 다운로드
    1. Google Play Developer API 라이브러리
      https://developers.google.com/android-publisher/libraries
    2. 예제 코드
      https://github.com/googlesamples/android-play-publisher-api/tree/master/v2/java
  2. Eclipse IDE에 프로젝트 Import
    1. 저의 경우에는 새로운 프로젝트를 생성한 후, 예제 코드의 src 복사
    2. Add External JARs : Google Play Developer API 라이브러리
  3. Google Developer Console 설정
    https://console.developers.google.com/project

    1. 새로운 프로젝트 생성
    2. APIs -> Google Play Android Developer API [ON] 으로 변경
    3. OAuth 정보 만들기 : [OAuth – Create New Client ID] 선택Google Developers Console 2014-09-16 13-06-27 2014-09-16 13-06-29
    4. Download JSON 후 프로젝트의 /resources/client_secrets.json 수정
  4. Play Store Developer API 액세스 설정
    1. 연결 설정: 생성한 Google Developer API
      API 액세스 - Google Play Developer Console 2014-09-16 13-14-11 2014-09-16 13-14-13
  5. ApplicationConfig.java 파일 설정
    1. APPLICATION_NAME
    2. PACKAGE_NAME
    3. SERVICE_ACCOUNT_EMAIL
    4. APK_FILE_PATH
  6. ListApks.java 를 실행하여 현재 Google Play Store에 올라온 APK 확인
  7. 실제 APK 업로드 : BasicUploadApk.java 실행
    1. 정상 처리 로그 확인
      2014. 9. 16 오후 2:09:24 com.google.play.developerapi.samples.AndroidPublisherHelper authorizeWithInstalledApplication
      정보: Authorizing using installed application
      2014. 9. 16 오후 2:09:25 com.google.play.developerapi.samples.BasicUploadApk main
      정보: Created edit with id: xxxxxxxxxxxxxxxxxx
      2014. 9. 16 오후 2:09:27 com.google.play.developerapi.samples.BasicUploadApk main
      정보: Version code xxx has been uploaded
      2014. 9. 16 오후 2:09:28 com.google.play.developerapi.samples.BasicUploadApk main
      정보: Track alpha has been updated.
      2014. 9. 16 오후 2:09:30 com.google.play.developerapi.samples.BasicUploadApk main
      정보: App edit with id xxxxxxxxxxxxxxxx has been comitted

Q1. APK를 업로드 할 때, 업데이트 되는 내용도 같이 적는데 이건 어디에서 작성하는지?

Q2. TRACK_ALPHA 이건 무슨 의미인가? alpha, beta, production, rollout 옵션이 존재함
아래 그림처럼 상태 값이 다르다(TRACK_ALPHA 를 alpha로 한 경우)

(단계적 출시 관련: https://support.google.com/googleplay/android-developer/answer/3131213?hl=ko)

APK - 테스트 - Google Play Developer Console 2014-09-16 14-36-20 2014-09-16 14-36-26

진행 중 발생하는 에러 1: 

javax.servlet.http.HttpServlet cannot be resolved.

해결책:

Java Servlet (javax.servlet.jar) 라이브러리 다운로드 후 프로젝트에 Include

Java Servlet 3.0 Final Release : http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

진행 중 발생하는 에러 2: 

Error: invalid_client
no application name
Request Details

Error 401 (OAuth2 Error)!!1 2014-09-16 11-50-44 2014-09-16 11-50-46

해결 방법:

http://stackoverflow.com/questions/18677244/error-invalid-client-no-application-name

https://console.developers.google.com/project 에서

APIs & auth 탭 – Consent screen 의 Email, Product Name 입력

참고자료:

http://zerobrain.tistory.com/52


Leave a comment

CI (Continuous Integration) 의 도입 필요성

최근 CI(Continuous Integration) 에 관심이 많은데, 막연하게 이 시스템이 좋은 걸 알고 있지만 왜 이러한 시스템이 필요한지 구체적으로 설명하기 어려웠다. 특히나 우리처럼 작은 개발팀에서 설명하기는 더 어려웠다.

관련 내용을 찾던 중에 아래 링크가 그 이유를 설명하고 있다. 간단히 그 내용을 소개하고자 한다.

CI (Continuous Integration) 에 대해 아시나요?

http://confluence.goldpitcher.co.kr/pages/viewpage.action?pageId=60358805

단계 1: 회귀 테스트(regression tests) 자동화가 필요한 이유

4가지 이유:

  1. 테스트(testers)가 직접 수행해야 하는 새로운 기능 테스트 시간을 늘려줍니다. (사람이 직접 해야 하는 지능적이고 창조적인 수동 테스트)
  2. 회귀 테스트 결과의 신뢰성 단계를 올려줍니다. (솔직이, 사람은 허술한 회귀 테스터입니다. 같은 일을 반복하는 것은 매우 지루한 작업입니다. 컴퓨터와는 다르게 저희 사람은 지루해 지고, 집중력이 떨어집니다)
  3. 일단 자동화 되면, 원하는 때에 언제든 수행할 수 있습니다. (회귀 테스트에 더 이상의 자원걱정이 없이 그저 “시작” 버튼만 누르면 됩니다.)
  4. 테스터의 직장만족도를 올려줍니다. – 더 적은 테스트 작업 전환과 반복 테스트, 버그를 찾을 더 많은 시간, 머리를 쓰는 일에 대한 더 많은 시간 할애

(참고) 오픈소스 자동화 툴 목록:

이이 많은 오픈소스 기반을 포함하여 자동화 테스트 도구를 제공하는 회사들이 있습니다. (www.opensourcetesting.org 사이트는 광범위한 오픈소스 자동화 툴 목록을 제공합니다).

단계 3: 지속적 통합(Continuous Integration) 서버가 여러분의 자동화된 테스트를 수행하도록 하라

이제 여러분은 자동화된 회귀테스트를 가지고 계시며 매우 빠르게 동작하는데 왜 테스트가 모두 수행될 동안 기다려야 하나요? 이제는 언제든 수행할 수 있습니다. 모든 릴리스, 패치 그리고 긴급 수정에 대해 전체 회귀테스트를 수행할 수 있습니다.
그러나 누가 테스트를 실행하고, 결과를 모으고, 리포트를 준비해 제출하나요?
회귀테스트가 매일 실행할 준비가 되었다면, 나머지는 모두 관리작업입니다. 물론, 이러한 것들을 자동화할 수 있습니다. 그것이 바로 continuous integration (CI), 즉 지속적 혹은 연속적 통합입니다.

단계 4: 여러분의 자동화된 테스트를 빌드 프로세스에 연동하라

이제 여러분은 CI 서버(continuous integration server)를 통해 여러분의 회귀테스트를 실행할 수 있게 되었으며, 개발자를 위해 자동으로 지속적인 빌드를 수행하도록 하는 필요한 플랫폼을 가지고 계십니다.
이제 개발 인프라는 준비되었으며, 개발자에게 이것을 사용하도록 하는 다음의 장점들을 개발자들에게 전달하시면 됩니다.:

  • 회귀테스트(Regression tests)는 테스트단계가 아닐 때도 자동으로 수행됩니다. “모든 회귀테스트 통과”는 이제 테스팅 단계에서 끝이 아니라 시작점이 됩니다.
  • 스모크 테스트(Smoke tests-테스트가능여부 파악을 위한 기본 테스트) 는 새로운 기능에만 이루어지면 되며, 기존의 기능들은 이미 전체적으로 테스트 된 상태가 됩니다.
  • CI 서버가 자동으로 테스트 실패를 통지하기 때문에, 자동화된 테스트가 실패할 때 버그 보고서를 별도로 작성할 필요가 없습니다.
  • CI 서버를 통해 개발의 진정한 상태가 모두(개발자외에도)에게 투명하게 항상 공개됩니다. 이것은 테스트가 계속 실패하는 상황인 경우 모든 사람에게 즉각적으로 확인이 되어 허술한 개발코드가 들어가는 것을 근본적으로 차단합니다.
  • 소프트웨어에서 변경으로 인해 업데이트가 필요한 회귀 테스트가 개발단계에서 발견될 수 있으며, 테스터에게 테스트 단계가 시작되기 전에 변경사항을 처리할 충분한 시간을 제공합니다.
  • 이제 여러분은 배포나 테스트환경의 패치와 같은 다른 작업들을 자동으로 처리하는데 확장 가능한 자동화된 빌드와 테스트 통합 프레임워크를 가지게 된 것입니다.

단계 5: 결과를 수확하라

이제 여러분은 새로운 기능을 테스트할 더욱 많은 시간을 가지며 테스트 실패 보고서에 시간을 허비하지 않습니다. 그것은 모든 변경사항이 테스트와 개발단계에서 전체 회귀테스팅 될 것이며, 스케쥴을 날려버릴 심각한 버그가 테스팅 단계에서 발견되는 일은 이제 없습니다.
동일한 시간동안 여러분은 더 많이 테스트 하실 수 있으며, 더욱 빨리 피드백을 받으며 모두가 테스트 작업을 볼 수 있습니다. 이제 더 이상 반복적인 작업을 하며 날밤을 세우는 일은 없을 것입니다. – 여러분 조직의 개발방법론은 Agile 이 아닐 수도 있습니다. 그러나 테스팅은 Agile 방법론을 사용하고 있는 것입니다.


1 Comment

기술 면접 자료

국내 IT 기업 인터뷰를 준비하면서 정리한 전공 관련 질문들과, 코딩 문제들을 정리하였습니다.

  • 전공 관련
    1. 다형성에 대해서 설명 하여라
    2. virtual 함수에 대해서 설명하여라
    3. 가상함수, Overriding 차이 : http://pacs.tistory.com/28
    4. 소멸자에 virtual을 쓰는 이유는 무엇인가?
    5. Volatile 키워드에 대해서 설명하여라
    6. 인터페이스와 추상클래스의 차이는?
    7. 스마트포인터에 대해서 설명하여라.
    8. Map과 hash_map의 차이에 대해서 설명하여라
    9. (java와 C++을 많이 사용해봤다고 하니까) OOP에 대해 설명해보라
    10. (프로젝트 관련해서) 서버-클라이언트간에 어떤 프로토콜을 쓸 것인지
    11. 쓰레드와 프로세스에 대해서
    12. 쓰레드간, 프로세스간에는 어떻게 통신하는가?
    13. 세마포어란 무엇인가?
    14. 데드락이란? 데드락을 피하는 방법, circular wait
    15. 자바와 C++의 차이점은 무엇인가
    16. (java) platform independent하다는게 어떤 의미인가?
    17. (java) volatile 키워드에 대해 설명해보라
    18. 인터페이스와 앱스트랙트 클래스에 대해, 차이점, 어떨때 쓰는지?  인터페이스를 쓰는 가장 큰 이유는 다중상속을 지원하지 않는 자바에서 다중상속의 장점을 가져오기 위해서입니다.
    19.  (자료구조)힙, 스택, 큐에 대해 설명해보라
    20. (언어)프로그램에서 스택과 큐는 어떤 의미인가(메모리관점에서)
    21. static 키워드, synchronized 키워드
    22. android context, intent, 4개 컴포넌트, activity life cycle
    23. 각각 언어 특성, 데드락 안걸리게 하려면 어떻게 해야 하나
    24. 세마 포어 관련 설명, 스핀락이 무엇인지
    25. 3G 특징, 배터리 소모 줄이는 방법
    26. 유선 네트워크에서 CSMA/CD, 무선에서 CSMA/CA, RTS/CTS 설명 부분
    27. 재귀적으로 BST 노드 삽입(소스)
    28. LRU 때 사용되는 자료구조 : Heap으로 설명했다, 아닌 거 같고, 업데이트시 삭제시
    29. 라우팅 패스 최적화, 브라질과 일본 통신
    30. XML, json 차이
    31. Restful Open API, SOAP
    32. http request response, get post 관련
    33. Test, Mock 특징
    34. SQLite 특징
    35. DB에서 index란? composite index, inner join, outer join
    36. CDN, 캐쉬된 데이터는 어떻게, 계속 업데이트 되는거
    37. NoSQL 기본 개념
    38. Map Reduce, 설명하고 소스 작성, 내가 한 프로젝트 관련
    39. android 관련 부분도 대답 못한게 있는 거 같은데? 잘 기억 안남, 4개 컴포넌트 중에서 어느 부분 사용
    40. 이미지 로드 했을 때, 메모리 용량을 줄일려면? 여러 개 띄웠을 때 어떻게 내려야 하는가?
  • 코딩 관련
    1. 단일 연결 리스트에서 맨 뒤에서 m번째 원소를 반환하는 함수를 구현하여라.
      m = 0이면, 맨 마지막 원소를 반환
      {1,2,3,4,5,6}, m = 2 (리턴값  4)
    2. 문자열에서 반복되지 않는 첫번째 문자를 찾아내는 효율적인 함수를 작성하여라.
      “total” => “o”
      “teeter” => “r”
    3. 문자열에 들어있는 단어의 순서를 뒤집는 함수를 작성하라.
      “do or do not. there is no try” =>
      “try no is there not. do or do”
      단어들은 공백으로 구별된다.
    4. 두개의 문자열이 같은지를 검사하는, Strcmp() 함수를 구현하여라
      같은 문자열이면 0을 리턴
      “abc”, “cbc” => 음수값
      “cbc”, “abc” => 양수값
      “abcde”, “abc” => 음수값
    5. 정수 만을 사용하여 ¼ 원을 그리는 함수를 작성하여라.
      sin/cos 함수는 사용할 수 없다.
      해당 픽셀을 그리는 SetPixel(int x, int y) 함수는 구현되어 있다.
    6. 16진수 수를 10진수로, 진수 변환 내용
    7. 정수/문자열 변환
    8. 2진수 스트링을 10진수 값으로 변환
    9. 두 개의 스택으로 큐 구현
    10. Linked List를 뒤집는 연산
    11. 나머지는 두 번, 하나 한 번 나오는 숫자 찾기
    12. 순환형, 비순환형 리스트 구분
    13. 어떤 정수를 표현 할 때 1의 개수
    14. 어떤 숫자가 2의 거듭 제곱수인지 아닌지 판단
    15. 문자열 “456”을 숫자로 바꾸는 함수를 짜 보아라
  • 창의성 관련
    1. 책 참고: 프로그래밍 면접, 이렇게 준비한다 Programming Interviews Exposed:
      (http://www.hanbit.co.kr/book/look.html?isbn=978-89-7914-524-3)
    2. 달팽이가 벽을 올라가는데 낮에 3cm를 올라가고 밤에 자는동안 2cm를 내려온다. 15cm벽을 오르는데 며칠이나 걸리겠는가?
    3. 내가 생각하고 있는 1~10사이의 숫자를 맞추려면 어떻게 해야하는가?
      범위가 모든 자연수라면 어떻게 하는 것이 빠른가? (원하는 답안: 각 자릿수에 대해 1~10사이의 숫자를 맞추는 것처럼 이진탐색을 수행한다)
    4. 5리터, 3리터, 4리터
    5. 1시간짜리 실로 15분 측정


Leave a comment

라인플러스(LINE Plus) 면접 준비

오늘부터 작년(2013년), 그리고 재작년(2012년) 지원했던 회사들에 대해서 정리를 하려고 한다.

조금 오래되었긴 하지만, 간단히 정리해둔 내용들 참고해서 하려고 하고,

취업 준비하다 보면 관련 내용들을 찾기 어려운데, 누군가에게 조금이나마 도움 되었으면 하는 마음에,

그리고 개인적인 정리도 할 겸 정리하려고 한다.

  • 채용 내용:

LINE+ : 글로벌메신저 LINE 개발 인력 채용

【Job Description】
– Java 또는 C,C++ 언어 개발
– 스마트폰(iOS/안드로이드)용 클라이언트 개발

【자격요건】
– Java / C, C++ / Object C / DB 이해 가능자
– Design(설계), Debugging, Algorithm 자료구조 이해 가능자
– LINE의 글로벌 도전에 동참하고 성공 경험을 만들어 가기를 원하는 개발자

【우대사항】
– java / C,C++ 중급 이상
– Android / iOS 앱 개발 유경험자
– 대용량 DB / Storage 설계 및 운영 경험자

  • 프로세스
    • 서류 전형
    • 1차 기술/인성 면접
    • 2차 기술/인성 면접
    • 3차 기술/인성 면접
Design a site like this with WordPress.com
Get started