웹 클라이언트 개발자 지원 - 전화 면접 기술 질문

기억나는거 남기기


1. [JavaScript] ==, === 차이 설명

== : 값만 같은면 true

===: 값과 자료형 모두 같이야 true



2. null, undefined의 차이

undefined : 값이 없다

null : null 객체 / 이미 정의된 객체

둘다 false 값을 지니지만, null은 이미 존재하는 객체, undefined는 할당 하지 않은 값 



3. 프로토타입이란?

생성자 함수 내에 메서드는 각기 객체를 생성할 때마다 동일한 함수를 계속 생성한다. 이와같은 상황에서 메모리를 쓸데없이 잡아먹는 일이 발생한다. 이를 위해 프로토타입이라는 공간을 사용하는데, 프로토타입은 생성자 함수를 사용해 생선된 객체가 공통으로 가지는 공간이다. 메서드를 하나만 생성해도 모든 객체가 해당 메서드를 사용할 수 있다.



4. new Worker() 설명



5. Cross Origin Resource Sharing 설명



6. jQuery 설명



7. 웹소켓 설명



8. 안드로이드 4대 컴포넌트가 무엇인가



TCP / IP는 각종 인터넷 프로토콜의 집합. OSI참조 모델을 엄격히 따르지 않으며, 네트워크, 인터넷, 전송, 응용계층 4개의 계층으로 구성


1. 네트워크 엑서스 계층

이더넷

헤더에 수신자, 송신자주소, 트레일러에서 부가정보

동일한 네트워크 대역안에서만 전송가능


2. 인터넷 계층

IP

이 계층에서 경로를 설정, 네트워크 엑세스 계층이 전송 담당

IP주소와 MAC 주소를 서로 알아낼때 사용하는 프로토콜 ip->mac : arp / mac->ip : rarp


3. 전송계층

TCP, UDP

TCP(SMTP:전자메일 프로토콜) 신뢰성 있는 전송, UDP 신뢰성 없는 전송

신뢰성 : 내가 보낸 데이터가 제대로 도착했는지 확인하는 절차가 있는것(ACK MSG)



참조 - http://blog.naver.com/qorckddls010/220980298441

'Study' 카테고리의 다른 글

조건부 컴파일(#if, #ifdef, #ifndef, #endif, #else, #elif)  (0) 2017.06.14
프론트엔드와 백엔드  (0) 2017.05.31
OSI 7 계층  (0) 2017.05.31
call by value/ reference  (0) 2014.11.24
어레이 리스트 맵  (0) 2014.11.24

조건부 컴파일(조건부 전처리 명령어) : 조건에 맞지 않으면 컴파일에서 제거. 조건에 맞지 않으면 소스차체가 없는 것과 같은 효과

이 조건부 전처리에서 조건이 거짓이라면 전처리기에 의해서 거짓에 해당하는 소스 코드쪽의 코드가 없어진다.

#if 계통, #ifdef 계통, #ifndef 계통


1. #if 계통 사용


#if 조건식 (실행문)

#elif 조건식 (실행문)

#else (실행문)

#endif


#if 조건식은 if 와 동일

조건식이 참이면 실행문을 실행하고 거짓이면 실행문을 실행하지 않는다.

#elif 또한 else if 와 동일

#else 는 else 처럼 위의 조건식이 다 거짓일때 실행

#endif는 #if의 끝을 표현한다



2. #ifdef, ifndef 계통 사용


이 조건부 전처리 명령어는 해당 매크로가 정의 되었느냐 안되었느냐만 본다.


#ifdef 매크로명 (실행문1)

#else (실행문2)

#endif


#ifndef 매크로명 (실행문)

#else (실행문)

#endif


#ifdef는 매크로가 정의 되어 있으면 실행문1을 남겨주고, 정의 되지 않았으면 실행문2를 남겨둔다.

#ifndef 매크로가 정의 되어 있지 않으면 실행문2를 남겨둔다.



참조 - http://blog.naver.com/highkrs/220470948236 || http://blog.naver.com/ms_bk/220053628917

'Study' 카테고리의 다른 글

TCP/IP  (0) 2017.06.15
프론트엔드와 백엔드  (0) 2017.05.31
OSI 7 계층  (0) 2017.05.31
call by value/ reference  (0) 2014.11.24
어레이 리스트 맵  (0) 2014.11.24

코드로직 최적화 -> 오브젝트 풀(리소스 최적화) -> Draw call -> 폰트 -> UI -> 사운드


FindObject 계열 함수들은 매우느리다

유니티 객체들은 변수에 저장해서, 캐싱해서 사용하는것이 좋다.

Instantiate와 Destroy함수를 이용한 프리팬의 생성/해제는 비용이 매우크다(활성화/ 비활성화 활용 -> 오브젝트 풀링)

Update 함수 보다는 Coroutine 활용

문자열은 readonly 혹은 const 키워드를 사용하여, 가비지 컬렉션으로부터 벗어나도록 한다

ResourceLoadAsync() 함수는 엄청느림

Draw call: 오브젝트에 설정된 재질의 셰이더 패스당 하나씩 일어난다. 렌더러에 사용된 재질의 수만큼 드로우 콜이 발생

static batch : 움직이지 않는 오브젝트들은 static으로 설정해서 배칭이 되게한다, 동일한 재질을 사용 할 경우, 자동으로 통합

dynamic batch : 움직이는 물제를 대상으로 동일한 재질을 사용하는 경우, 자동으로 통합


GC

GC는 언제 인어날지 모르며 일어나면 사용자 이용에 불편이 발생 GC 관리가 필요

빈 콜백함수는 제거


오브젝트 풀링

오브젝트(or 프리팹)의 동적 생성과 해제는 부하가 크다.

오브젝트가 해제되면 언젠가는 GC가 동작

오브젝트를 풀을 만들어 미리 많이 만들어 두고, 활성화/비활성화로 사용

풀에서 가져와서 사용하고, 사용이 끝나면 비활성화 상태로 풀에 반환




  • 이미지(텍스쳐) 설정
    • Generate Mil Maps 해제: 카메라와의 거리를 다이나믹하게 조정하는 게임이 아닌 이상 필요 없음.
    • 압축 옵션의 포맷은 알파값이 있다면 Truecolor 아니면 Compressed 옵션을 추천:
      알파값 존재시 Compressed 옵션으로 인한 화질저하 대비 용량 이득이 크지 않음. 반대로 알파값이 없는 경우 큰 용량 절감 효과를 보여줌. 다만 알파값이 불필요하게 잡혀 들어갔다면 Advanced에서 RGBA가 아닌 RGB 압축 포맷으로 지정해주면 됨.
    • TinyPNG 같은거 쓰지마라. 알아서 유니티가 압축함. 마찬가지로 사이즈를 아무리 크게 해서 넣어도, 압축 설정에 따른 최종 결과물은 같다. 임포트 하기전에 압축한다고 화질을 열화시키는 것은 무의미하다.
    • 도트형 레트로 스타일의 게임인 경우 스프라이트에 필터를 사용하면 안된다. 도트형 그래픽의 외곽선을 부드럽게 꺽어 왜곡하여 비주얼상 더 난잡해 보인다.
    • 압축시 2의 제곱수를 변길이로 가진 정사각형으로 이미지를 사용하므로, 가능한 이 정사각형에 가깝게 이미지 사이즈를 제작하길 추천. 예를 들면 900x1600의 해상도를 가진 물체라면 1024x1024와 2048x2048 중에 maxSize를 고민해야할지도 모른다. 전자는 화질이 손상되고 후자는 낭비다.
    • 개별 이미지를 atlas로 합치는 것이 성능에 도움이 된다. 방법은 이곳을 참고: http://lhh3520.tistory.com/350
      • 참고로 Resources 폴더의 텍스쳐는 엔진 구조상의 문제로 유니티 내부 기능으로 팩킹 불가능. 5에서도 여전하니, 해결되길 기다리자.
    • Advacned로 압축을 설정할때 압축 포맷이 빌드 타켓 플랫폼과 호환되는지 확인하라. 호환되지 않는 포맷은 해당 플랫폼에서 무압축으로 적재된다.
      • ECT2가 ECT1호환 된다고 하지만, 그건 호환이 된다는거지 실제론 무압축으로 올려버린다. 그리고 ETC2가 대세긴 하지만 현실적으로 ETC1을 지원하는 구기기들이 점유율이 더 많다.
  • UGUI
    • 하나의 캔버스에 모든 UI요소를 넣는 것이 좋지만은 않다. 캔버스에서 상호작용 가능한 스프라이트가 동적으로 변할때, 캔버스에 있는 전체 요소들에 대해 갱신비용이 들어간다.
  • 사운드 설정
    • 모바일에서 스트레오는 큰 의미를 가지지 않는다. Force To Mono 사용.
    • Preload Audio Data는 씬 로드에 부담을 준다. 해제.
    • Load in Background는 엄격하게 재생 타이밍을 맞춰야 하는 경우가 아니면, 체크할 수 있다. 오디오는 조금 늦게 재생되지만 로딩 속도를 적게나마 향상시킬 수 있다.
    • 로드 타입에서 Decompress On Load는 압축을 해제해서 메모리에 적재하기에, 플레이 하는 순간에 오버헤드가 생기지 않는다. 적은 용량의 파일, 효과음에 사용.
    • Compress On Memory는 메모리에서는 압축되어 있다가 재생시 압축을 해제한다. 플레이하는 순간에 오버헤드가 생길 수 있다. 메모리에 그대로 적재하기는 힘든 큰 용량의 파일, 배경 음악에 사용.
    • 역시 모바일에서 높은 kbps는 크게 의미 있지 않다. 가능한 줄여본다.
    • 오디오 매지너에서 스트레오 사운드가 필요없으면 스피커 모드를 Mono나 Raw로 한다.
  • 폰트
    • 모든 완성형 한글을 메모리에 넣어도 괜찮다고 생각하는게 아니라면 Dynamic을 사용한다.
    • 만약 해당 폰트를 꼭 써야하는게 아니라면 Incl. Font Data를 해제한다. 해당 폰트가 시스템에 존재하면 사용하고, 없으면 시스템 폰트를 가져다 쓸것이다. 빌드 사이즈가 줄어든다.
  • 물리 설정
    • 물리, 레이캐스팅을 사용하지 않는 형태의 게임이라면 충돌 레이어 설정을 해제하라. 프로젝트 세팅 중 Physics 에서 Collision 레이어 항목 체크를 해제해준다.
    • FixedUpdate는 랜더와 상관없이 물리를 위해 독립적으로 일정 간격 호출되는 함수다. 필요에 따라 호출간격으로 조정해준다. 게임에 따라 0.2초에 한번 호출,, 정도로 호출 간격을 늘려도 문제없다.
  • 빌드시 세팅
    • x86을 사용하는 안드로이드 기기는 거의 없다. FAT을 하지 말고 ARM 대상으로만 빌드
    • Stripping Level의 경우 가능한 높은 수준을 추천하나, micro nmscorlib이나 byte code 세팅은 프로그램을 크래쉬할 수 있으니 빌드 테스트를 한다. 일반적으로는 무난하게 assembly 로 적용하고 바로 빌드한다.
    • 32비트 품질이 필요한지 비교후, 그렇지 않다면 체크 해제한다.
    • 호환에 문제가 없다면 .NET 2.0 Subset 사용


참조 - http://blog.naver.com/alan79/220963558032

'Unity' 카테고리의 다른 글

Update(), LateUpdate(), FixedUpdate()  (0) 2017.06.13

Update()

Update 함수는 매 프레임마다 호출



LateUpdate()

LateUpdate 매 프레임마다 호출

모든 Update 함수가 호출된 후 호출된다.

Update함수에서 실행되는 특정 기능이 완전히 실행된 후에 실행하고 싶은 기능이 있다면 LateUpdate 함수에서 실행하는 것이 바람직하다(예 캐릭터를 따라가는 메인카메라의 이동)



FixedUpdate()

edit/ project setting / time / Fixed tilestep 에서 설정한 주기로 호출한다

Update gkatnsms FrameRate에 따라 불규칙하게 호출되는기 때문에 물리엔진 충돌검사가 제대로 안될 수 있기 때문에(Frame 사이 보간 처리해서 검사를 정확히 안할 경우)

이럴경우에 FixedUpdate를 사용한다 FrameRate와 상관없이 Fixed TimeStep에 따라 정확한 주기로 호출(Time.deltaTime을 이용할 필요가 없다)



프레임 종속적 : Update, LateUpdate

프레임 비종속적 : FixedUpdate




참조 - http://tenlie10.tistory.com/76  ||  http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=6438&ckattempt=1

'Unity' 카테고리의 다른 글

유니티 최적화  (0) 2017.06.13

프론트엔드 /  백엔드 Front end / Back end


프로세스의 처음과 마지막 단계를 가리킴

프론트엔드 : 유저들에게 보여지는 화면. 웹페이지를 그리는 기술. 사용자로부터 다양한 형태의 입력을 받아 백엔드가 사용할 수 있는 규격을 따라 처리할 책임을 진다. 사용자와 가까운 시스템의 전면부분! 시스템의 시작점이나 입력부분을 말한다.

기본적으로 HTML+CSS 웹표준코딩은 물론 html5 최신버전 및 JavaScript 필수. JavaScript, JQuery, HTML, CSS를 사용해 구현하고자하는 웹서비를 웹브라우저에서 실제로 작동하게 만드는 일을 수행.

프론트 엔드 개발자의 경우 보여지는 UI 만을 그리는것과 성능이나 웹브라우저의 호환성 등 수준이 높은 기술들이 필요하다.




백엔드 : 눈에 보이지 않는 서버에서 작용하는 기술을 다룸. 가장 많이 사용되는 기술은 Java로 되어있으며, 스프링 프레임워크를 기반으로도 많이 사용되고 있다.



프론트엔드 프로그램은 사용자들과 직접 상호작용하는 프로그램이고, 백엔드 프로그램은 보통 요구되는 자원들에 가깝게 있거나 또는 요구되는 자원들과 교신할 수 있는 능력을 가지는 것을 통해 프론트엔드 서비스를 간접적으로 지원합니다.



출처 -http://blog.naver.com/hbi2hyunjung/220824572558, http://tjdbwls17.blog.me/220811838409


'Study' 카테고리의 다른 글

TCP/IP  (0) 2017.06.15
조건부 컴파일(#if, #ifdef, #ifndef, #endif, #else, #elif)  (0) 2017.06.14
OSI 7 계층  (0) 2017.05.31
call by value/ reference  (0) 2014.11.24
어레이 리스트 맵  (0) 2014.11.24

public class Test {

public static void main(String[] args) {

String str1 = "Hello ";

String str2 = "Java!";


// 문자열 비교

System.out.println(str1.equals(str2));

System.out.println(str1.equals("Hello "));


System.out.println(str1.equalsIgnoreCase(str2));

System.out.println(str1.equalsIgnoreCase("hello "));


// 문자열 병합

System.out.println(str1.concat(str2));

System.out.println(str1 + str2);


// 문자열 길이

System.out.println(str1.length());

System.out.println(str2.length());


// 문자열의 시작과 끝

System.out.println(str1.startsWith("H"));

System.out.println(str2.endsWith("!"));


// 특정위치의 문자열 반환

System.out.println(str1.charAt(1));


// 문자열 교체

System.out.println(str1.replace('l', 'L'));

System.out.println(str1);

System.out.println(str2.replaceAll("a", "A"));


// 공백제거

System.out.println(str1.trim().length());

// 대소문자 상호 변환

System.out.println(str1.toLowerCase());

System.out.println(str2.toUpperCase());

// 문자열의 부분 추출

System.out.println(str1.substring(0, 3));

System.out.println(str2.substring(3));

}

}


결과


'Cording' 카테고리의 다른 글

코딩) 최소공배수  (0) 2014.11.27
코딩) 최대공약수  (0) 2014.11.27
코딩) 약수 구하기  (0) 2014.11.27
코딩) 소수 구하기  (0) 2014.11.27
코딩) 피보나치 수열  (0) 2014.11.27

OSI 7 계층(Open System Interconnection 7 Layer)


모든 네트워크 통신에서 생기는 여러가지 충돌 문제를 완하가기 위하여, 구제표준기구(OSI)에서 표준화된 네트워크 구조를 제시한 기분 모델.

총신망을 통한 상호접속에 필요한 제반 통신절차를 정의하고 이 가운데 비슷한 기능을 제공하는 모듈을 동일계층으로 분할하여 모두 7계틍으로 분할한 것.

물리층 - 데이터링크층 - 네트워크층 - 전송층 - 세션층 - 표현층 - 응용층

1~4 계층 : 하위계층 / 5~7 계층 : 상위계층

상위계층은 데이터 생성, 하위계층은 데이터 전송이 주목적


7계층(Data) : 사람과 컴퓨터가 소통하는 사이에 있는 계층, 응용프로그램

6계층(Data) : 데이터를 암호화하거나, 인코딩을 결정

5계층(Data) : 상대방과 연결을 하기위해 세션을 만들고 없애는 과정을 책임진다.


4계층(Segments) : 전송방식을 결정하는 계층. ex) TCP/IP의 포트번호를 결정한다거나..

오류검출을 상위계층에서 수행하지 않도록 이 계층에서 수행. 패킷들이 전송이 유호한지 확인하고 전송 실패한 패킷들을 다시 전송하도록 하는 역할

주소 : port, 프로토콜 : tcp/ip, PDU(프로토콜 데이터 단위) : 세그먼트

3계층(Packets) : 데이터를 분할해서 패킷 생성이 주목적. 최적의 경로를 결정하는 역할

주소 : ip, 프로토콜 : icmp, arp ,  PDU : 패킷

2계층(Frames) : 링크의 활성화를 유지, 비활성화 담당. 2진 데이터의 오류제어와 흐름제어. 3계층에서 온 데이터 캡슐화

주소 : MAC Address, PDU : 프레임

1계층(Bits) : 전기신호(1, 0)를 전송하는 역할을 한다. 0, 1을 어떻게 표현할지 결정


‣ OSI (Open System Interconnection) 모델의 7개 계층구조

‣ OSI (Open System Interconnection) 모델의 7개 계층구조
구 분설 명

네트워크 지원계층
(한 장치에서 다른 장치로 데이터를 이동할 때 필요한 물리적인 면(즉, 전기적인 규격, 물리적인 연결, 물리주소, 전송시간과 신뢰도 등) 처리)

1. Physical layer
(물리층)

물리적 매체를 통해 비트 흐름을 전송하기 위해 필요한 기능들을 조정하고, 인터페이스의 기계적·전기적 규격, 전송매체를 다룸. 물리적인 장치와 인터페이스가 전송을 위해 필요한 기능과 처리절차를 규정함

2. Data link layer
(데이터링크층)

가공되지 않은 내용의 전송을 담당하는 물리층을 신뢰성 있는 링크로 변환시켜 주고 노드-대-노드 전달(node-to-node delivery)함

3. Network layer
(네트워크층)

패킷을 발신지로부터 여러 네트워크(링크)를 통해 목적지까지 전달함

전송층
(종단-대-종단까지의 믿을 만한 데이터 전송 보장)

4. Transport layer
(전송층)

전체 메시지의 프로세스-대-프로세스 전달을 함

사용자 지원계층
(서로 상관없는 소프트웨어 시스템 사이의 상호연동을 가능하게 함)

5. Session layer
(세션층)

네트워크의 대화 조정자로 통신하는 시스템들 사이의 상호작용을 설정·유지하고 동기화 함

6. Presentation layer
(표현층)

두 시스템 사이에서 교환되는 정보의 구문과 의미에 관련되어 변환, 압축 및 암호화를 담당함

7. Application layer
(응용층)

사용자(사람 또는 소프트웨어)가 네트워크에 접근할 수 있도록 함. 사용자 인터페이스를 제공하고, 전자우편, 원격 파일접근과 전송, 공유 데이터베이스 관리 및 여러 종류의 분산정보 서비스를 제공함



OSI 7계층(Open System Interconnection 7 Layer)


[네이버 지식백과] OSI 7계층 [Open System Interconnection 7 Layer] (ITS 용어사전, 2010., 한국지능형교통체계협회)


참조 - http://blog.naver.com/qorckddls010/220971563868

'Study' 카테고리의 다른 글

조건부 컴파일(#if, #ifdef, #ifndef, #endif, #else, #elif)  (0) 2017.06.14
프론트엔드와 백엔드  (0) 2017.05.31
call by value/ reference  (0) 2014.11.24
어레이 리스트 맵  (0) 2014.11.24
논리연산식  (0) 2014.11.24

인터페이스란?

일종의 추상클래스, 추상클래스보다 추상화 정도가 높다.

실제 구현된 것이 전혀 없는 기본설계도.

추상메서드와 상수만을 멤버로 가질 수 있다.

인스턴스를 생성할 수 없고, 클래스 작성에 도움을 줄 목적으로 사용된다.

미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용된다.


작성

'class'대신 'interface'를 사용한다는 것 외에는 클래스 작성과 동일하다.

모든 멤버변수는 public static final 이어야하며 생략가능

모든 메서드는 public abstract 이어야 하며 생력가능


상속

상속가능, 다중상속가능


구현

인터페이스를 구현하는 것은 클래스를 상속받는 것과 같다. extends 대신 implements 를 사용한다.

인터페이스에 정의된 추상메서드를 완성해야 한다.

상속과 구현이 동시에 가능하다.


장점

1. 개발시간 단축

2. 표준화가능

3. 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.

4. 독립적인 프로그래밍이 가능



'Java' 카테고리의 다른 글

추상클래스(abstract class)  (0) 2014.12.16
this와 super  (0) 2014.12.16
상속(Inheritance)  (0) 2014.12.16
오버로딩 vs 오버라이딩  (0) 2014.12.16
JVM의 메모리 구조  (0) 2014.12.16
추상클래스란?

추상클래스는 미완성 설계도

추상메서드를 포함하고 있는 클래스

일반메서드가 추상메서드를 호출할 수 있다.

완성된 설계도가 아니므로 인스턴스를 생성할 수 없다.

다른 클래스를 작성하는 데 도움을 줄 목적으로 작성한다.


추상메서드란?

선언부만 있고 구현부가 없는 메서드

꼭 필요하지만 지손마다 다르게 구현될 것으로 예상되는 경우에 사용

추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다.


추상클래스의 작성

여러클래스에 공통적으로 사용될 수 있는 추상클래스를 바로 작성하거나 기존클래스의 공통부분을 뽑아서 만든다.



'Java' 카테고리의 다른 글

인터페이스(interface)  (0) 2014.12.16
this와 super  (0) 2014.12.16
상속(Inheritance)  (0) 2014.12.16
오버로딩 vs 오버라이딩  (0) 2014.12.16
JVM의 메모리 구조  (0) 2014.12.16

this - 인스턴스 자신을 가리키는 참조변수. 인스턴스의 주소가 저장되어 있음. 모든 인스턴스 메서드에 지역변수록 숨겨진 채로 존재

super - this와 같음. 조상의 멤버와 자신의 멤버를 구별하는데 사용. 

'Java' 카테고리의 다른 글

인터페이스(interface)  (0) 2014.12.16
추상클래스(abstract class)  (0) 2014.12.16
상속(Inheritance)  (0) 2014.12.16
오버로딩 vs 오버라이딩  (0) 2014.12.16
JVM의 메모리 구조  (0) 2014.12.16

상속이란

기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것.

두 클래스를 조상과 자손으로 관계를 맺어주는 것.

자손은 조상의 모든 멤버를 상속받는다.(생성자, 초기화블럭 제외)

자손의 멤버개수는 조상보다 적을 수 없다.(같거나 많다) 

단일 상속만을 허용한다.

Object 클래스는 모든 클래스의 최상위 클래스이며 조상이 없는 클래스는 자동적으로 Object 클래스를 상속받게된다.


상속관계

공통부분은 조상에서 관리하고 개별부분은 자손에서 관리한다.

조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다.

is a 관계 : ~은 ~이다.


포함관계

한 클래스의 멤버변수로 다른 클래스를 선언하는 것

작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다.

has a 관계 : ~은 ~을 가지고 있다.


'Java' 카테고리의 다른 글

추상클래스(abstract class)  (0) 2014.12.16
this와 super  (0) 2014.12.16
오버로딩 vs 오버라이딩  (0) 2014.12.16
JVM의 메모리 구조  (0) 2014.12.16
변수의 종류  (0) 2014.12.15

+ Recent posts