디스토피아
신입 개발자 기술면접 대비 질문답변 정리 1 본문
반응형
*자주 묻는 기술면접 질문 목록
============= 자바 ====================
1. 자바의 특징 혹은 자바 언어의 장점
특징
- 이식성이 높은 언어(운영체제가 다르고, CPU가 달라도 같은 코드를 사용해 프로그램을 실행할 수 있다는 말)
- 객체 지향 언어
- 메모리를 자동으로 관리
- 함수적 스타일 코딩 또한 지원(람다식)
- 다양한 애플리케이션 개발에 용이
- 멀티쓰레드를 쉽게 구현 가능
- 동적로딩을 지원, 오픈 소스 라이브러리가 풍부
장점
- 간결하면서도 강력한 객체지향 언어이다.
- 개방형 구조로 여러 기술과 융합이 가능하다.
- 플랫폼에 독립적이므로, 여러 운영체제나 하드웨어에서도 동일하게 실행한다.
- 많은 오픈소스 프레임워크로 생산성을 증가하고 유지보수 비용을 절감할 수 있다.
2. 변수란 무엇이며, 변수의 종류는 어떠한 것이 있나
- 값을 저장할 수 있는 메모리 상의 공간을 의미
- int, string, char, boolean, double, long, byte, short
3. 변수의 명명 규칙, 자바의 네이밍 규칙
- 대소문자는 구분되며 길이의 제한은 없다
- 예약어 사용 불가
- 숫자로 시작하면 안된다.
- 특수문자는 _ 와 $ 만 허용한다.
- 파스칼 표기법과 카멜 표기법(최초에 사용된 단어를 제외한 첫번재 문자가 대문자이며 나머지는 소문자)을 사용한다.
4. 변수를 사용하는 목적이 무엇인가
- 코드의 재활용성과 가독성을 높여주고, 중복을 제거해서 유지보수를 용이하게 하기 위해 사용한다.
7. 객체 지향 언어란 무엇인가
- '객체'라는 개념을 기반으로 한 프로그래밍 패러다임중 하나이다.
8. 객체란 무엇인가
- 객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고
다른것과 식별 가능한 것을 말한다.
9. 객체지향의 3대 원칙(혹은 4대 원칙)
- S (Single responsibility Principle) 단일 책임 원칙
클래스와 메소드는 하나의 역할만 하도록 한다.
- O (Open Closed Principle) 계방 폐쇄 원칙
자신의 확장에는 개방돼 있고, 주변의 변화에 대해서는 폐쇄돼 있어야 하낟.
- L (Liskov Substitution Principle) 리스코브 치환 원칙
서브타입은 언제나 자신의 상위 타입으로 교체할 수 있어야 한다.
- I (Interface Segregation Principle) 인터페이스 분리의 원칙
클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안 된다.
- D (Dependency Inversion Principle) 의존 역전 원칙
자신보다 변하기 쉬운 것에 의존하지 마라.
10. 캡슐화란 무엇인가
- 중요한 데이터를 보존 보호하는 것
- 연관 있는 변수와 함수를 클래스로 묶는 작업
11. 상속이란 무엇인가
- 부모 클래스의 변수/메소드를 자식 클래스가 물려받아 그대로 사용 가능하게 하는 것
12. 다형성이란 무엇인가
- 하나의 객체가 여러 타입을 가질 수 있는 것
13. 추상화란 무엇인가.
- 공통된 행위나 필드를 모아서 클래스를 만드는 것
14. 클래스와 객체의 차이점은 무엇인가.
- 객체 : 소프트웨어 세계에 구현할 대상
- 클래스 : 객체를 구현하기 위한 틀, 연관되어 있는 변수아 메서드의 집합
15. 객체 지향 언어의 장점은 무엇인가
- 재사용성 : 상속을 통해 프로그래밍시 코드의 재사용을 높일 수 있다.
- 생산성 향상 : 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써 개발의 생산성을향상시킴.
- 자연적인 모델링 : 우리 일상생활의 모습의 구조가 객체에 자연스럽게 녹아들어 있기 때문에 생각하고
있는 것을 자연스럽게 구현할 수 있다.
- 유지보수의 우수성 : 프로그램 수정시 추가, 수정을 하더라고 캡슈로하를 통해 주변 영향이 적기 땜누에
유지보수가 쉬어서 매우 경제적이다.
16. 클래스에 사용 가능한 접근제한자와 키워드가 무엇이 있나
- public : package, class가 동일하지 않아도 모든 접근이 가능
- default : 동일 package에서만 접근을 허용, 접근 제한자 생략시 기본적으로 default 접근 제한자가 적용됨
17. 생성자에 사용 가능한 접근제한자와 키워드
- public : 모든 패키지에서 제한 없이 생성자 호출 가능
- protected : 같은 패키지에 속하는 클래스에서 생성자 호출 가능, 다른 패키지에 속한 클래스가
해당 자식 클래스라면 생성자를 호출할 수 있다.
- default : 생성자를 선언할 때 제한자를 아무것도 적지 않으면 default 접근 제한을 가진다.
같은 패키지 내에서 아무런 제한 없이 생성자 호출 가능
- private : 오로지 클래스 내부에서만 생성자 호출 가능, 객체 생성 가능
18. 필드에 사용 가능한 접근제한자와 키워드(의미 명확하게 알 것)
- public : 모든 패키지에서 제한 없이 생성자 호출 가능
- protected : 같은 패키지에 속하는 클래스에서 생성자 호출 가능, 다른 패키지에 속한 클래스가
해당 자식 클래스라면 생성자를 호출할 수 있다.
- default : 생성자를 선언할 때 제한자를 아무것도 적지 않으면 default 접근 제한을 가진다.
같은 패키지 내에서 아무런 제한 없이 생성자 호출 가능
- private : 오로지 클래스 내부에서만 생성자 호출 가능, 객체 생성 가능
19. 메소드에 사용 가능한 접근제한자와 키워드
- public : 모든 패키지에서 제한 없이 생성자 호출 가능
- protected : 같은 패키지에 속하는 클래스에서 생성자 호출 가능, 다른 패키지에 속한 클래스가
해당 자식 클래스라면 생성자를 호출할 수 있다.
- default : 생성자를 선언할 때 제한자를 아무것도 적지 않으면 default 접근 제한을 가진다.
같은 패키지 내에서 아무런 제한 없이 생성자 호출 가능
- private : 오로지 클래스 내부에서만 생성자 호출 가능, 객체 생성 가능
20. final 키워드의 사용 가능 위치와 그 의미에 대해 설명
final 변수
- 상수라고도 불린다
- 변수를 선언함과 동시에 초기화하며 이후에 값을 수정할 수 없다.
- 오직 get만 가능하다.
final 메소드
- 오버라이딩(Overriding)이 불가능하다.
- 상속 받은 그대로 사용해야 한다.
final 클래스
- 상속(Inheritance)이 불가능하다.
- subclass를 만들 수 없다.
21. 오버로딩이 무엇인가
같은 이름의 함수(메서드)를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있게 하는것
22. 오버로딩의 성립 요건이 무엇인가
1. 메서드 이름이 같아야 한다.
2. 매개 변수의 개수 또는 타입이 달라야 한다.
3. 매개 변수는 같고 리턴 타입이 다른 경우는 오버로딩이 성립되지 않는다.
4. 오버로딩된 메서드들은 매개 변수에 의해서만 구별될 수 있다.
23. 오버라이딩이 무엇인가
부모 클래스로부터 상속받은 메서드의 내용을 변경하는것
24. 오버라이딩과 성립 요건이 무엇인가
1. 이름이 같아야 한다.
2. 매개변수가 같아야 한다.
3. 리턴 타입이 같아야 한다.
25. 오버로딩과 오버라이딩의 차이에 대해 전체적으로 설명
오버로딩 : 같은 이름의 메서드를 여러 개 가지면서 매개 변수를 다르게 정의하는 것
오버라이딩 : 상위 클래스(부모 클래스)가 갖고 있는 메소드(자식 클래스)를 하위 클래스에서 재정의해 사용하는것
26. 변수의 선언 위치에 따른 변수 종류와 메모리 할당 위치
- 클래스 변수 : 클래스 영역, 클래스가 메모리에 올라갈 때
- 인스턴스 변수 : 클래스 변수, 인스턴스가 생성될 때
- 지역 변수 : 클래스 이외의 영역(메서드, 생성자, 초기화블럭), 변수 선언문이 수행되었을 때
27. static 키워드의 의미와 라이프사이클
(간혹 static과 void의 차이를 물어본다. 연관은 없지만 각각 알고 있다면 답변할 수 있다)
- 정적 변수를 선언하기 위해서 사용하는 키워드
- 프로그램의 생성과 함께 할당되고 프로그램의 종료시에 해제 된다.
void : return값이 없는 메서드
29. return이란?
- 값을 반환하는 동작을 한다.
- 메서드를 중단시키는 역할도 한다. return이 처음 등장한 이후의 구문은 실행되지 않는다.
30. 매개변수와 인자의 차이
인자 : apthem 호출시에 전달되는 값
매개변수 : 메소드에서 전달 받은 값
31. 자바에서 메소드의 호출 방식과 자료구조, 해당 자료구조의 특징
Call by calue(값에 의한 호출)
- 메소드로 인자값을 넘길 때, 그 값을 복사하여 넘기기 때문에 메소드 내에서는 복사된 값으로 작업을 하고, 원래의 값을 변경시키지 않는다.
자료구조
List
원하는 순서로 Element삽입가능, 각 요소는 Index 번호를 부여 받는다.
- ArrayList : 중복 Yes, 순서 Yes, 정렬 No, THREAD-SAFE No
- LinkedList : 중복 Yes, 순서 Yes, 정렬 No, THREAD-SAFE No
- Vector : 중복 Yes, 순서 Yes, 정렬 No, THREAD-SAFE Yes
SET
중복 Element불가능, 그러므로 쉽게 중복여부 확인 가능, 특정 순서(Order)정할 수 없음
- HashSet : 중복 No, 순서 No, 정렬 No, THREAD-SAFE No
- LinkedHashSet : 중복 No, 순서 Yes, 정렬 No, THREAD-SAFE No
- TreeSet : 중복 No, 순서 Yes, 정렬 Yes, THREAD-SAFE No
MAP
Key/Value로 구성된다. Key 중복 허용X, value 중복 허용O
- HashMap : 중복 No, 순서 No, 정렬 Yes(Key), THREAD-SAFE No, null key/value 허용
- LinkedHashMap : 중복 No, 순서 Yes, 정렬 No(Key는 삽입한 순서대로 정렬), THREAD-SAFE No
- Hashtable : 중복 No, 순서 No, 정렬 No, THREAD-SAFE Yes
- TreeMap : 중복 No, 순서 Yes, 정렬 Yes, THREAD-SAFE No
Queue
먼저 들어온 데이터가 먼저 나가는 구조
Output으로 나올 Element만 기본적으로 접근 가능하다.
1. 큐는 한쪽 끝은 프런트(fornt)로 정하여 삭제 연산만 수행함
2. 다른 한쪽 긑은 리어(rear)로 정하여 삽입 연산만 수행함
3. 예시) 컴퓨터 버퍼에서 사용/마구 입력됐으나 처리를 못할 때, 버퍼(큐)를 만들어 대기 시킴
PriorityQueue
일반적인 큐의 구조 FIFO(First In First Out)과 다른, 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터가 먼저 나가는 자료구조
1. 내부 요소는 힙으로 구성되어 있다.
2. 우선순위 큐에 저장할 객체를 필수적으로 Comparable Interface를 구현해야 한다. 구현 후 compareTo 메소드를 override 하게 되고 해당 객체에서 처리할 우선순위 조건을 리턴해주면 PriorityQueue가 알아서 우선순위가 높은 객체를 추출해준다.
Deque
큐의 양쪽에서 데이터를 삽입과 삭제를 할 수 있는 자료구조를 의미한다.
1. 어느 쪽에서 입력하고 어떤 쪽에서 출력하느냐에 따라서 스택(Stack)으로 활용할수도 있고, 큐(Queue)로도 활용할 수 있다.
2. Null요소는 사용 불가
32. package란 무엇인가
클래스들의 모음집
33. import란 무엇인가
다른 패키지 안의 클래스를 사용하기 위해 클래스 이름 앞에 붙이는 것
34. 상속을 사용하는 목적이 무엇인가.
연관된 일련의 클래스에 대한 ‘공통적인 규약을 정의하고 적용하는 것’
35. 상속의 장점
1. 기존에 작성된 클래스를 재활용 가능ㄴ
2. 자식 클래스 설계 시 중복되는 맴버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서는 해당 맴버를 작성하지 않아도 됨
3. 클래스 간의 계층적 관계를 구성함으로써 다형성의 문법적 토대를 마련
36. 상속의 특징
- 부모 클래스 > Super class, 자식 클래스 > Sub class
- 자바는 다중 상속을 지원하지 않는다. extends뒤에는 하나의 부모 클래스만 올 수 있다.
- 상속 횟수에 제한이 없다.
- 자바의 최상위 클래스는 Object이다. 즉 자바의 모든 클래스는 Object의 자손
37. 다형성의 장점
하나의 배열로 여러 종류의 객체를 다룰 수 있다.
각각의 타입을 ᄄᆞ로 정의하지 않아도 되므로 코드양이 그만큼 줄어든다.
38. 동적바인딩이란
프로그램이 실행되어야 메모리에 크기가 얼마만큼 할당되는지 알 수 있게 되는 것을 의미
39. 동적바인딩 성립 요건
상속 관계로 이루어져 다형성이 적용된 경우에, 메소드 오버라이딩이 되어 있으면 정적으로 바인딩 된 메소드 코드보다 오버라이딩 된 메소드 코드를 우선적으로 수행하게 된다.
40. 추상클래스란 무엇인가
클래스들의 공통되는 필드와 메소드를 정의한 클래스
41. 추상클래스의 특징
1. 클래스 앞에 abstract 키워드를 이용해서 정의한다.
2. 미완성의 추상 메소드를 포함할 수 있다.
3. 자체적으로 객체를 생성할 수 없다. 따라서 상속을 통해 자식 클래스에서 인스턴스를 생성해야 한다.
4. 일반적인 상속의 특성과 동일하다.
42. 추상클래스의 사용 목적
상속을 강제하기 위해 사용한다. 즉 부모 클래스에는 메소드의 시그니처만 정의해놓고 그 메소드의 실제 동작 방법은 이 메소드를 상속받은 하위 클래스의 책임으로 위임하고 있다.
43. 추상클래스의 장점
- 추상 클래스에서 설계가 완료되면 자식 클래스에서 상속을 받아서 기능을 확장하는데 용이
- 자식 클래스에서 추상 메소드의 구현을 강요하기 때문에 표준화 정도를 높임
- 클래스들의 공통 사항을 한 곳에서 관리할 수 있기 때문에 개발 및 유지보수가 편리해짐
44. 인터페이스란 무엇인가
자바 프로그래밍 언어에서 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다.
42. 인터페이스의 특징
1. 추상 메소드만 정의 가능
2. 일반 클래스는 여러 interface를 다중 상속할 수 있다.
3. 인터페이스간의 상속에서는 다중상속이 제공된다.
4. 상속을 받은 일반 클래스는 interface의 추상 메소드를 모두 재정의 해야 한다.
43. 인터페이스의 사용 목적
공동 작업시 충돌을 방지하기 위해서
44. 인터페이스의 장점
1. 개발 시간을 단축 시킬 수 있다.
- 인터페이스를 사용하면 다른 개발자들이 각각의 부분을 완성할 때 까지 기다리지 않고 서로 규약만 정해두어 각자의 부분만 따로 나눠서 작성된 코드를 컴파일 할 수 있다.
2. 클래스 간 결합도를 낮출 수 있다.
- 코드의 종속성을 줄이고 유지보수성을 높이도록 해준다.
3. 표준화가 가능하다.
- 클래스의 기본틀을 제공하여 개발자들에게 정형화된 개발을 제시할 수 있다.
45. 추상클래스와 인터페이스 정리
공통점 : 추상 메소드를 사용한다. 객체 생성이 불가능하다.(상속받은 자식에서만 객체를 생성하여 사용가능하다.)
차이점
- 추상클래스 : 추상메소드의 부분적인 작성이 가능, 변수 선언가능, 다중상속 불가, abstract, extends 키워드 사용
- 인터페이스 : 추상메소드의 선언만 가능, 상수만 선언가능, 다중상속 가능, interface, implements 키워드 사용
46. String과 StringBuilder의 차이점
String클래스는 조회가 많은 환경에서 성능적으로 유리하며, StringBuffer&StringBuilder 클래스는 문자열 연산이 자주 발생할 때 문자열이 변경가능할 객체기 때문에 성능적으로 유리하다.
47. StringBuffer와 StringBuilder의 차이점
StringBuffer와 StringBuilder의 차이점은 동기화 지원의 유무이고 동기화를 고려하지 않는 환경에서 StringBuilder가 성능이 더 좋고, 동기화가 필요한 멀티쓰레드 환경에서는 StringBuffer를 사용하는 것이 유리하다.
48. Wrapper클래스란?
기본 자료타입을 객체로 다루기 위해서 사용하는 클래스
49. autoboxing과 autounboxing에 대해
- 오토박싱(AutoBoxing) : JDK 1.5 이상에서는 기본 타입의 데이터를 객체 타입의 데이터에 할다앟면 기본타입의 데이터가 객체 타입의 데이터로 자동으로 형변환이 되면수 참조 변수에 할당한다.
- 오토언박싱(AutoUnBoxing) : 오토박싱과 반대로 객체 타입의 데이터를 기본 타입의 변수에 할당하면 자동으로 형변환이된다.
50. String을 기본자료형으로 바꾸는 방법
'원하는 자료형의 래퍼클래스명.parse'원하는 자료형의 래퍼클래스명(“원하는 텍스트”)‘
ex) int A = Integer.parseInt("100");
51. 기본자료형을 문자열로 바꾸는 방법
String.valueOf(변수명)
52. java.util.Date, java.sql.Date, Calendar, GregorianCalendar 다루는거 익숙해지게 연습좀 해두기! 코딩테스트에 자주 나온다..
53. 예외처리를 하는 목적
프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하기 위해
54. 대표적인 RuntimeException 5가지와 핸들링 방법(면접에서 어떤 에러를 경험해봤고 어떻게 해결했는지를 물어볼때가 있다.)
1. ArithmeticException : 정수를 0으로 나누었을 경우
2. ArrayStoreException : 배열 유형이 허락하지 않는 객체를 객체 배열에 젖아하려는 경우
3. ArrayIndexOutOfBoundsException : 배열을 찹조하는 인덱스가 잘못된 경우
4. ClassCastException : 적절치 못하게 Class를 형 변환하는 경우
5. NullPointerException : 널(null)객체를 참조했을 경우
핸들링 방법
1. try, catch block
2. throws
4. throw(인위적 Exception 발생)
55. 예외처리를 하는 방법
try, catch, throw, throws, finally
56. 사용해본 Stream 종류에 대해 설명하세요
- InputStream : 문자/바이트 입력 스트림을 위한 추상클래스
- OutputStream : 문자 출력 스트림을 위한 추상클래스
- FileInputStream : 파일에서 바이트를 읽어들여 문자/바이트 스트림으로 변환
- FileOutputStream : 문자/바이트 스트림을 바이트 파일로 변환
57. 자료구조를 사용하는 이유
데이터를 사용하는데 있어 효율성을 높이기 위해
58. List계열과 Set 계열의 특징
List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용함
Set : 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음
59. Map 계열의 특징
키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않고, 키는 중복을 허용하지 않으며 값의 중복을 허용함.
60. Vector란?
저장순서를 유지하며 중복을 허용한다. 멀티쓰레드에 대한 동기화가 되어 있다.
61. tree구조와 stack, queue 자료 구조에 대해
tree : 계층적 자료구조로 루트라는 노드가 있고 각 연결된 노드는 부모-자식 관계이며 노드간 사이클이 존재하지 않는 자료구조
stack : 입력된 데이터는 중복될 수 있으며 나중에 들어간 것이 먼저 나오는 후입 선출 자료구조이다.
queue : 입려된 데이터는 중복될 수 있으며 먼저 들어간 것이 먼먼저 나오는 선입선출 자료구조이다.
62. 제네릭스를 사용하는 이유
1. 컴파일 시 강한 타입 체크를 해서 에러를 사전에 방지하기 위해
2. 타입 변환을 제거해서 프로그램 성능을 향상시키기 위해
63. 제네릭스를 사용하면 좋은점
1. 컴파일 타임에 타입을 체크하기 때문에 객체 자체의 타입 안전성을 높인다.
2. 형 변환의 번거로움을 줄일 수 있다.
64. 프로세스란 무엇인가
실행중인 프로그램
65. 스레드란 무엇인가
프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다. 또한 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스 라고 한다.
66. 스레드와 프로세스의 차이
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
67. 멀티스레드와 멀티 프로세스에 대해 설명
멀티 프로세스
- 두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는것
- 각 프로세스간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우 사용한다.
멀티 스레드
- 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다.
68. 스레드의 장단점
장점
- 빠른 프로세스 생성
- 적은 메모리 사용
- 쉬운 정보 공유
단점
- 교착상태에 빠질 수 있다.
69. 스레드를 구현하는 방법
1. Thread 클래스를 상속 받는다.
2. Runnable 인터페이스를 구현한다.
70. 동기화처리란
여러 개의 스레드가 한 개의 자원을 사용하고자 할 때 해당 스레드만 제외하고 나머지는 접근을 못하도록 막는 것
71. 동기화처리를 하는 방법
1. synchronized를 이용한 동기화
2. wait(), notify()를 이용한 동기화
72. 데몬스레드란
주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드
73. 서버와 클라이언트에 대해 설명하세요
클라이언트 : 서비스를 사용하는 사용자
서버 : 클라이언트에게 네트워크를 통해 서비스를 제공하는 시스템
74. 소켓 프로그래밍이란
프로세스간의 통신에 사용되는 양쪽 끝단을 이용한 통신 프로그래밍이다.
75. TCP와 UDP
TCP
연결 방식
- 연결 기반(connection-oriented)
- 연결 후 통신(전화기)
- 1:1 통신방식
특징
- 데이터의 경계를 구분안함(byte-stream)
- 신뢰성 있는 데이터 전송
- 데이터의 전송순서가 보장됨
- 데이터의 수신여부를 확인함(데이터가 손실되면 재전송됨)
- 패킷을 관리할 필요가 없음
- UDP보다 전송속도가 느림
관련 클래스
- Socket
- ServerSocket
UDP
연결방식
- 비연결기반(connectionless-oriented)
- 연결없이 통신(소포)
- 1:1, 1:n, n:n 통신방식
특징
- 데이터의 결계를 구분함(datagram)
- 신뢰성 없는 데이터 전송
- 데이터의 전송순서가 바뀔 수 있음
- 데이터의 수신여부를 확인안함(데이터가 손실되어도 알 수 없음)
- 패킷을 관리해줘야 함
- TCP보다 전송속도가 빠름
관련 클래스
- DatagramSocket
- DatagramPacket
- MulticastSocket
반응형
'정보·기타 > 직장인' 카테고리의 다른 글
2023년 상반기 취준생들 상황.jpg (0) | 2023.07.16 |
---|---|
신입 개발자 기술면접 대비 질문답변 정리 2 (0) | 2023.07.10 |
여직원 직장생활 팁 (2) | 2023.07.05 |
개발자 로드맵 (0) | 2023.06.10 |
유급휴가 연차 쓰기도 힘든데 애플페이 때문에 분노한 사람들이 많은 이유 (0) | 2023.04.21 |
Comments