소소한 Everyday Life/책2016. 8. 18. 16:58




나는 한 번 읽은 책은 절대 잊어버리지 않는다 : 10년이 지나도 잊어버리지 않는 독서법



출간일: 2016년 01월 20일

저자: 카바사와 시온

역자: 은영미




독서 후기는 


나중에...

'소소한 Everyday Life > ' 카테고리의 다른 글

아침 1시간 노트  (3) 2016.08.18
내일이 내 생애 마지막 날이라면  (0) 2016.08.18
Posted by 기억속의먼그대에게
IT/면접 대비2016. 8. 16. 09:04

-출처 [게시판 검색]

http://www.hoons.net/






1. 


(기간 : 2010 ~ 2011)

- 자기소개 해보라

- 언어 뭐 할줄 아냐? 

- 파견근무 인데 가능하겠냐? (지방파견)

- 주력으로 사용하는 언어에 대한 지식이 어느정도인지?

- 프로젝트 해본게 뭐 있나?

- 부당한 대우를 하는 상사가 있다면 어떻게 하겠는가? 

- 내 공로를 뻇아가는 상사가 있다면 어떻게 하겠는가?

- 야근이 많이 있을수 있다 괜찮냐? <--- 거의 단골 질문입니다. 

- 교회다니네? (종교활동관련해서 수요일이나 토요일 이런날 열심히 교회 나가는지 여부 확인) 일요일날 일할수도 있는데... ? 

- 회사에서 주력언어가 아닌 다른 언어의 프로젝트만 계속 주면 하겠는가? 

- 노조에 대해서 어떻게 생각하는가?

- 기존 회사에서 노조활동을 한 적이 있는가?

- 기존 회사의 규모는 ?

- 기존 회사에서 맡았던 일과 업무는?

- 자신의 성격을 말해보라

- 꿈과 비전이 무엇이냐?

- 출근이후에 원래 생각하던 업무와 다른 업무가 주어진다면?

- 좋아하는 취미가 무엇이냐? 우리회사는 주말마다 사장님과 등산을 한다..

- 좋아하는 운동은 무엇이냐?

- 이전 직장 퇴직 사유는?

- 학교생활에 대해서 설명해 보라.

- 영어는 어느정도 할줄 아는가?

- 술 담배는 하는가?

- 여자친구는 있는가? 혹은 남자친구가 있는가?

- 결혼했는가? 


작은 소규모 회사인 경우 검증절차를 갖추기 보다 인력수급이 문제가 많아 어느정도 능력이 있다 싶으면 바로 뽑는 경향이 크구요. 어느정도 50명이상의 사업장의 경우에는 면접시 기술이나 언어에 대한 면접질문이 많았습니다. 100명이 넘어가는 사업장의 경우에는 인성이나 가족사, 학업에 대한 질문 등 기술적인 것 이외의 질문이 많았습니다. 압박하는 면접을 진행하기도하고 PT를 시키거나, 각오를 말하게 하는 등의 다른 부분도 보는 것 같았습니다. 그리고 보통 일정규모 이상의 회사의 경우엔 언어나 기본적인 전공지식에 대해서 거의 100% 물어본다고 보시면 됩니다. 면접시에 인사팀장이나 인사과장이신 분만 계시면 보통은 전공지식보다 인성에 대해서 많이 물어보시고, 실무자라면 전공지식에 대해서 많이 물어봅니다. 그리고 이직이 잦은 특성상 이전직장의 이직사유에 관심이 많고, 끈기있게 책임감 있게 일을 할수 있는지에 대해서 많이 물어봅니다. 




2.


상속, override, overload, 다형성과 같은 OOP 개념과 힙, 스택과 같은 자료구조, 정렬과 같은 기초 알고리즘, DB 쪽은 query 작성 또는 동작원리


일주일만에 만들 수 있는 프로그램으로는 웹이면 게시판, 응용이면 회원관리


Posted by 기억속의먼그대에게
IT/면접 대비2016. 8. 16. 08:58

- 출처

http://www.hoons.net/Board/cshaptip/Content/50598


[2009-02-18]





[C# 언어 부분]


1. string과 StringBuild의 차이점에 대해서 설명해주세요. 난이도 ★☆☆☆☆

기본적인 차이는 String은 immutable(불변함), StringBuffer는 mutable(변함,변하기쉬움)


string 타입은 불변 객체이기 때문에 string에 대한 모든 변환은 새로운 메모리 할당을 발생시킨다.

가장 큰 문제는 문자열을 더할 때다. 


예) 비효율적인 문자열 연산

string txt = "hello world";


for(int i=0; i<300000; i++)

{

txt= txt + "1";

}


1. 힙에 "hello world" 문자열을 담은 공간을 할당한다.

2. 스택에 있는 txt 변수에 1번 과정에서 할당된 힙의 주소를 저장한다.

3. txt+ "1" 동작을 수행하기 위해 text.length + "1".length에 해당하는 크기의 메모리를 힙에 할당한다. 그메모리에 txt변수가 가리키는 힙의 문자열과 "1" 문자열을 복사한다.

4. 다시 스택에 있는 txt변수에 3번 과정에서 새롭게 할당된 힙의 주소를 저장한다.

5. 3번과 4번의 과정을 30만 번 반복한다.


문제는 3번 과정에 있다. 끊임없이 메모리를 할당하고 이전의 문자열을 다시 복사하는 과정을 거치기 때문이다.


바로 이러한 문제를 해결하기 위해 BCL에 추가된 클래스가 StringBuilder 다.


1. Stringbuilder 는 내부적으로 일정한 양의 메모리를 미리 할당한다.

2. Append 메서드에 들어온 인자를 미리 할당한 메모리에 복사한다. 

3. 2번 과정을 30만 번 반복한다. Append로 추가된 문자열이 미리 할당한 메모리보다 많아지면 새롭게 여유분의 메모리를 할당한다.

4. ToString 메서드를 호출하면 연속적으로 연결된 하나의 문자열을 반환한다.


즉, 작은 메모리 할당과 복사가 없어졌기 때문에 그만큼 성능이 향상된 것 이다. 


이 때문에 문자열을 연결하는 작업이 많을 때는 반드시 StringBuilder를 사용하는 것을 권장한다.

 


2. using 이라는 키워드는 네임스페이스를 링크하기 위해서 사용하기도 하지만 객체를 생성할 때 또한 사용되기도 합니다. 이때 using을 이용하는 목적에 대해서 설명해주세요. 난이도 ★★☆☆☆

try/finally를 대신하는 using 예약어를 제공한다.


using (FileLogger Log = new FileLogger("sample.log"))

{

log.Write("Start");

log.Write("End");

}

 

using은 괄호 안에서 생성된 객체의 Dispose 메서드를 블록이 끝나는 시점에 자동으로 호출하는 역할을 한다.


즉, using 예약어는 try/finaly/Dispose 에 대한 간편 표기법에 해당된다.


3. C# 2.0에서는 델리게이트를 쉽게 등록하는 문법적 편의를 위해서 익명 메서드라는 문법을 제공했습니다. 그리고 C#3.0에는 이 익명 메서드를 더 쉽게 사용할 수 있게 하기 위해서 람다식이라는 문법이 등장하게 됩니다. 그렇다면 익명메서드와 람다식 구문을 사용하는 코드를 작성해주세요. 난이도 ★★★☆☆

익명 메서드(anonymous method)란 단어 그대로 이름이 없는 메서드로서 델리게이트에 전달되는 메서드가 일회성으로만 필요할 때 편의상 사용한다.


예) 익명 메서드 사용

static void main(string[ ] args)

{

Thread thread = new Thread(

delegate(object obj)

{

Console.WriteLine('익명 메서드 호출");

});

thread.Start();

thread.Join();

}

 

Thread 생성자에 직접 delegate 예약어를 사용해 메서드의 코드를 전달한다. 이떄 delegate 예약어의 괄호에는 원래의 델리게이트 형식에서 필요로 했던 매개변수를 전달해야한다.


예) 람다식 구문 사용

Thread thread = new Thread(

(obj) =>

{

Console.WriteLine('익명 메서드 호출");

}


delegate 예약어를 생략하는 동시에 인자의 타입을 굳이 개발자가 명시하지 않아도 되게 만들었다.


4. 닷넷에서의 데이터 타입은 값 타입과 참조 타입으로 구분되어 힙영역과 스택영역에 데이터를 나누어서 저장하게 됩니다. 때문에 빈번하게 박싱/언박싱이 일어나게 됩니다. 그렇다면 박싱 언박싱은 무엇인지 그리고 성능에 있어서 어떤 영향을 미치는지 설명해주세요. 난이도 ★★★☆☆

박싱(Boxing) : 값 형식을 참조 형식으로 변환

스택에 있는 데이터가 힙으로 복사

암시적 형변환 가능


언박싱(unboxing) : 참조 형식을 값 형식으로 변환

힙에 있는 데이터가 스택으로 복사

명시적 형변환 필요

박싱한 객체에 대해서만 언박싱이 가능

박싱할 때의 값 형식의 타입을 준수

예)

short i= 123; // 값 형식

object o = i; //박싱

int j = (int) o; //int 로 언박싱 불가능



언박싱은 반드시 명시적으로 이루어지며, 박싱된 변수의 공간과는 별도 메모리 공간에 값이 저장 된다.


이러한 변환 과정은 object 타입과 System.ValueType 을 상속받은 값 형식의 인스턴스를 섞어 쓰는 경우에 발생한다.


예)

static void Main(string[ ] args)

{

int a = 5;


object obj = a; // 박싱: 값 형식인 int를 참조 형식인 object에 대입


int b = (int)obj; // 언박싱: 참조 형식인 object를 값 형식인 int에 대입

}

박싱으로 인해 관리 힙을 사용하게 됐고, 이는 GC에게 일을 시키게 만든다. 즉, 박싱이 빈번할수록 GC는 바빠지고 프로그램의 수행 성능은 그만큼 떨어진다.


따라서 박싱을 과다하게 발생할 수 있는 코드는 최대한 줄이는 것을 권장한다.



값 형식 <-> 참조 형식, 스택과 힙 영역을 오가는 박싱/언박싱은 아래와 같은 문제가 있다.

MSDN 에서는 이 과정에 대한 비용을 다음과 같이 설명하고 있습니다

boxing  unboxing 과정에는 많은 처리 작업이 필요합니다값 형식을 boxing할 때는 완전히 새로운 개체가 
만들어져야 하며이러한 작업에는 할당 작업보다 최대 20배의 시간이 걸립니다. unboxing을 할 때는 캐스팅 
과정에 할당 작업보다 4배의 시간이 걸릴 수 있습니다


그럼 언제 그리고 왜 사용하는가?

이처럼 비용이 많이 들고 성능에 악영향을 끼치는 박싱/언박싱은 왜 지원하는 걸까요?

이유야 찾아 보면 여러 가지 있겠습니다만대표적으로 사용상의 편의성이라 말하고 싶네요

 

C#의 모든 자료형은 System.Object 로부터 상속을 받게 됩니다

즉 System.Object 로 데이터를 처리할 경우 특정 타입으로 인한 제약사항에서 자유로워 지게 됩니다

이것은 배열과 같은 복합자료를 다룰 경우 유용한데요.

 

닷넷 프레임워크에서 제공하는 System.Collections.ArrayList 클래스는 대표적인 복합자료형 입니다

 

ArrayList에 저장할 수 있는 요소의 타입은 어떤 형식이라도 상관이 없는데요아래 코드를 보면

ArrayList에 정수문자객체 등을 그 타입을 가리지 않고 마구(?) 추가할 수 있습니다

 

System.Collections.ArrayList al = new System.Collections.ArrayList();

al.Add(123);                       //정수 추가

al.Add("안녕하세요");           //문자열 추가

al.Add(new Program());       //객체 추가

 

이것은 ArrayListy의 Add 메서드가 object 타입의 매개변수를 취하고 있기 때문입니다

 object 타입이면 모두 가능하며 이 말은 곧 C#의 모든 자료형을 저장할 수 있다는 의미입니다

 

이와 같이 특정 자료형에 구애 받지 않고 복합 자료를 다룰 경우 편리성을 제공하게 되는 것입니다

(배열과 같이 동일한 타입의 자료만 저장할 수 있는 것과는 대조됩니다)

 

그러나 결국 al.Add(123) 과 같은 명령은 123이라는 정수형 자료가 object 타입으로 박싱이 일어나게 되며

데이터를 가져올 때에 해당 타입으로 언박싱을 해줘야 합니다

 

object o = al[0];

int j = (int) o;

 

즉 편리하기는 하지만 그 만큼의 비용은 지불해야 하는 것입니다

 

또한 위와 같이 ArrayList에 여러 타입의 자료를 저장하게 되면 값을 가져올 때 박싱 되기 전 자료형으로

명확히 캐스팅을 해줘야 하기 때문에 형식에 대한 불안정성도 증가하게 됩니다

(참고로 닷넷 2.0 부터는 이러한 ArrayList 의 단점인 고비용과 형식 불안정성을 개선하기 위해

지네릭 버전의 컬렉션을 제공하게 됩니다)



- 부분 출처

http://www.mkexdev.net/Article/Content.aspx?parentCategoryID=1&categoryID=5&ID=671



5. 객체를 만들 때 메모리 해제를 위해서 일반적으로 IDisposable 인터페이스를 상속받아서 처리하게 되는 경우가 많습니다. 닷넷에서의 소멸자는 Dispose(), Finalize()가 존재하는데 이 두 가지의 차이점은 무엇인지 기술해주세요. 난이도 ★★★★☆


마이크로소프트는 자원 해제가 필요하다고 판단되는 모든 객체는 개발자로 하여금 IDisposable 인터페이스를 상속받도록 권장하고 있다.


IDisposable 인터페이스가 구현돼 있다면 해당 객체의 사용이 끝나면 Dispose 메서드를 호출해야 한다는 것을 직관적으로 알 수 있다.


Dispose하기 전에 예외가 발생한다면 Dispose메서드가 호출되지 않으므로 정상적으로 자원 회수가 안된다. 

따라서 보통 try/finally를 이용해 Dispose를 호출하는 것이 관례다.



- 하기 내용 출처 

http://hongjinhyeon.tistory.com/95


1.차이점



클래스 인스턴스에서 관리되지 않는(unmannaged resource) 리소스들(DB 접속, 파일관리등)을 캡슐화할 때가 존재합니다.

해당 인스터스가 종료될 때 이 리소스를 해제하는 명시적인 방법(Dispose)과 암시적인 방법(Finalize)을 모두 제공되어야 합니다.


보통은 해당인스턴스가 더이상 참조 되지 않을때 GC가 자동적으로 Finalize를 호출해서 리소스를 해제합니다.

하지만 GC에 인스턴스가 수집되기전에 프로그래머가 해제할 수도 있습니다. 이런 경우는 해당 리소스가 드물거나

비싼경우에 명시적으로 Dispose를 호출해서 해제하면 성능이 향상될 수 있습니다.


Dispose를 사용해서 명시적 제어 기능을 제공하더라도 Finalize 을 사용한 암시적으로 정리하는 기능을 제공해야합니다.

프로그래머가 Dispose를 호출하지 못했을때 리소스 누수가 발생하지 않도록 백업하는 기능을 합니다.


2.예제소스


01.//base class
02.public class Base: IDisposable
03.{
04.private bool disposed = false;
05. 
06.//IDisposable 인터페이스 구현
07.public void Dispose()
08.{
09.Dispose(true);
10.GC.SuppressFinalize(this); //Finalize()
11.}
12. 
13.protected virtual void Dispose(bool disposing)
14.{
15.if (!disposed)
16.{
17.if (disposing)
18.{
19.//관리되는 자원을 해제
20.}
21.//관리되지 않는 자원을 해제
22.//큰 변수들을 null로 설정한다.
23.disposed = true;
24.}
25.}
26. 
27.// 소멸자 구현
28.~Base()
29.{
30.// Simply call Dispose(false).
31.Dispose (false);
32.}
33.}
34. 
35.// base class를 상속받는 클래스에서의 dispose 구현
36.public class Derived: Base
37.{
38.private bool disposed = false;
39. 
40.protected override void Dispose(bool disposing)
41.{
42.if (!disposed)
43.{
44.if (disposing)
45.{
46.//관리되는 자원 해제
47.}
48.//관리되지 않는 자원해제
49.//큰 변수들을 null로 설정한다.
50.disposed = true;
51.}
52.//기본클래스의 dispose 호출
53.base.Dispose(disposing);
54.}
55. 
56.//위의 Derived클래스에서는 Finalize와 Dispose()가 구현이 안되어 있는데
57.//이것은 base클래스에서상속받는다.
58.}



3.소스분석

base class에서는 IDisposable 인터페이스를 구현해서 dispose를 구현합니다.

CASE 1 - 프로그래머가 명시적으로 Dispose를 호출해서 자원을 해제한다고 한다면, 우선 Derived 클래스의 인스턴스에서
Dispose()를 호출하게 됩니다. 이때 상속받은 base클래스의 메서드가 실행되면서 Dispose(true) 로 관리되는 자원과 관리되지 않는
자원이 모두 해제가 되며  GC.SuppressFinalize(this); 이 구문으로 가비지컬렉터에서 Finalize가 호출되지 않게 처리합니다.

CASE 2 - 프로그래머가 명시적으로 Dispose를 호출하지 못한다면, base클래스의 소멸자가 호출이되고  Dispose (false); 구문에서
관리되지 않는 자원만 해제가 됩니다.





[닷넷 아키텍처 부분]


1. 3-Tier 기반의 프로젝트는 무엇인지 그리고 3-Tier기반의 시스템이 가지는 장점은 무엇인가요? 난이도 ★☆☆☆☆


2. SQL 서버에서는 다양한 곳으로 데이터를 서비스 하게 됩니다. 이때 멀티 사용자들이 한 테이블에 접속하기 때문에 Lock을 걸게 됩니다. 그렇다면 NoLock과 DeadLock의 개념에 대해서 기술해주세요. 난이도 ★★☆☆☆


3. 닷넷이 등장하면서 기존의 COM과 MTS의 기능을 동시에 지원하는 COM+ 즉, 엔터프라이즈 서비스가 등장하였습니다. 많은 대형 프로젝트에서 엔터프라이즈 서비스를 기반으로 시스템을 설계하여 사용하고 있는데 이 때 COM+의 장점은 무엇인가요? 난이도 ★★★☆☆


4. 닷넷 웹 서비스는 w3c에서 정의한 표준 기술입니다. HTTP 통신을 기반으로 하는 이기종 통신 기술인 만큼 많은 한계들이 있었습니다. 그래서 흔히 ws-* 로 부르는 다양한 스펙들이 추가되게 됩니다. 이 중에 WS-Security, WS-Address, WS-ReliableMessage 라는 스펙들이 존재하는데 이 스펙들 중 한가지를 선택해서 어떤 한계로 등장하여 어떤 역할을 하게 되는지 설명해주세요. 난이도 ★★★★☆


5. 애자일 개발 방법론에 대해서 설명하고 닷넷에서 애자일 기반의 프로젝트를 진행하고자 할 때 이용할 수 있는 적합한 도구는 무엇인지 설명해주세요.

난이도 ★★★★☆

보너스 - (애자일 기반의 개발을 해본 경우)

애자일 방법론을 실제로 적용한 이후 팀이나 프로세스 개선효과가 가장 적은 결과를 나타내는 곳의 공통적인 문제를 해결하는 가장 좋은 방법은 무엇인가요?


[IT트랜드 및 닷넷교양 부분]



1. IT 개발트랜드는 OOP에서 CBD로 그리고 2000년도에는 다시 SOA로 발전해 왔습니다. 그리고 최근에 Open API와 같은 서비스가 등장하면서 SOA보다는 WOA기반의 서비스가 트랜드화 되어 가고 있습니다. 흔히 WOA기반의 서비스를 Restful 서비스라고 부르는데 Restful 서비스의 개념을 설명해주세요. 난이도 ★☆☆☆☆


2. 최근에는 웹에서의 사용자의 경험을 상승시키고 UI를 화려하게 보여주기 위한 RIA기술이 화두가 되고 있습니다. 다음 아래의 기술 중에 웹 브라우저에서 가장 가볍게(Thin) 동작할 수 있다고 생각되는 순서대로 뽑아서 나열해주세요. 난이도 ★★☆☆☆

보기: 실버라이트(Flex), 일반웹(Classic웹), Ajax기반의 웹페이지, XBAP, SmartClient)


3. SaaS(Software as a Service)나 Software+Service의 개념에 대해서 설명해주세요. 난이도 ★★★☆☆


4. SOA가 화두가 되었을 때 다양한 타입의 데이터를 여러 기종에 전달할 수 있는 허브 역할을 하는 ESB 개념의 제품을 판매하게 되었습니다. 그렇다면 마이크로소프트에서 이 ESB와 같은 개념을 도입할 수 있는 제품의 이름은 무엇인가요? 난이도 ★★★★☆


5. Spring 같은 경우 자바에서 상당히 많이 이용되는 오픈 소스 프레임워크 입니다.

닷넷에서 또한 엔터프라이즈 라이브러리, IBATIS.NET, Spring .NET, Nhibernate와 같은 다양한 프레임워크가 존재합니다. 이 중 사용해 본 프레임워크 있으신가요? 사용해본 느낌과 함께 기술해주세요. 난이도 ☆☆☆☆☆ (경험에 대한이야기)












Posted by 기억속의먼그대에게