Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
gghwan committed Oct 11, 2024
2 parents fc8cccb + 7cf4117 commit b2b6444
Show file tree
Hide file tree
Showing 7 changed files with 597 additions and 0 deletions.
75 changes: 75 additions & 0 deletions _posts/2024-09-10-Interview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#리액트&스프링부트 면접

1. 리액트는 왜 쓰나요? 아는대로 설명하세요.

A. 컴포넌트 단위로 쪼개쓰기 위해서 쓰임. 웹 자체의 기능들을 쪼개서 관리하면 더 효율적이기 때문이다.

​ 22년 이후의 발표를 살펴보면, 웹기반에서 가장 많이 사용되는게 리액트라고 알고 있다. 많은 기업들이 쓰기 때문에, 유지보수나

​ 서비스 배포시에 유리하다고 할 수 있다.

2. **Virtual DOM**은 무엇이며, **React**는 어떻게 **실제 DOM**과 비교하여 더 효율적으로 UI를 업데이트하나요? **그 동작 과정을 설명**하세요.

A. Virtual Dom같은 경우, 랜더링할때, 실제 DOM에 모든 변경사항을 반영하는 것이 아닌

​ 필요한 변경사항들만 반영한 UI형태를 업데이트 하도록 만든다.

3. React에서 상태가 업데이트될 때, 컴포넌트가 다시 렌더링되는 과정은 어떻게 이루어지나요? 리렌더링이 발생하는 원리와 조건을 설명하세요.

4. React 컴포넌트가 처음 마운트될 때와 업데이트될 때 useEffect는 각각 어떻게 동작하나요? useEffect의 cleanup 함수가 호출되는 시점을 설명하세요.

5. React에서 useMemo 훅은 어떤 상황에서 사용되며, 내부적으로 어떻게 최적화를 진행하나요? 사용하지 않았을 때와의 성능 차이를 설명하세요.

6. React에서 useReducer와 useState의 차이점은 무엇인가요? useReducer가 필요한 상황과 그 동작 원리를 설명하세요.

7. React에서 props drilling가 무엇이며, 이를 해결하기 위한 방법을 아는대로 설명하세요.

8. Spring Boot 애플리케이션은 기존 Spring 애플리케이션에 비해 어떤 장점을 가지나요?

A. 스프링 부트를 사용하면, 스프링의 장점을 모두 사용할 수 있다. 자동화된 부면들이 있기 때문에 프로토 타입을 만들거나 서비스를 배포하기 전에 미리 시현하는 경우, 프로젝트 규모가 별로 크지않은 경우에 쓰면 매우 효율적이다. 하지만 복잡한 동작을 요구한다면, 스프링을 쓰는 것이 낫다. 스프링 부트의 경우 독립된 상태의 모듈을 만질 수 있다는 장점이 있지만, 대규모 프로젝트시에 유지보수하는 경우 불리하다.

9. 브라우저에서 Spring Boot 애플리케이션 서버로 요청이 들어왔을 때 서버가 응답하는 동작 원리를 아는대로 설명하세요.

A. 톰캣을 통해 서버의 요청을 받고, 톰캣이 서블릿 컨테이너로써 request, response 객체를 생성후 요청에 매핑된 서블릿이나 프론트로 보낸다.

10. Spring의 IoC (Inversion of Control)와 DI (Dependency Injection)개념에 대해 아는대로 설명하세요.

A. 의존성의 정도에 따라 나뉜다. 이는 곳 스프링의 결합도의 차이에 영향을 미친다.

11. Spring Boot에서 AOP (Aspect-Oriented Programming)의 동작원리를 아는대로 설명하세요.

12. Spring Boot에서 @Transactional 어노테이션이 작동하는 방식과 트랜잭션이 실제로 어떻게 커밋되고 롤백되는지 설명하세요.

13. 서버사이드 렌더링과 클라이언트 사이드 렌더링의 차이에 대해 아는대로 설명하세요.

14. Spring Boot에서 @Repository, @Service, @Controller 어노테이션이 각각 어떤 의미를 가지며, 이들 간의 역할 분담은 어떻게 이루어지나요?

A. @Repository : 데이터 베이스 담당, 직접 DB에 관여한다. @Service: 응용계층 담당, @Controller: Http 요청과 요청된 정보를 체크하고, 인증을 담당한다.

15. JPA란 무엇이며, 왜 사용하는가? JDBC와 JPA의 차이점을 설명하세요.

A. DB에 대한 연결성에 따라 차이가 있다.

16. MyBatis는 무엇이며, JPA와 무엇이 다른지 설명하세요.

A. 직접 작성한 SQL에 의존하기 때문에, 성능 최적화가 쉽다.-> MyBatis, 동적인 쿼리 생성과 ORM의 복잡성이 있을 때, 쿼리 관리 하려면 JPA를 쓴다.

​ 즉, DB와의 상호작용 방식에 따라 차이점이 있다.

17. Spring Boot에서 전역 예외처리를 위한 방법이 무엇인지 설명하세요.

A. @RestControllerAdvice, @ControllerAdvice가 주로 전역적으로 예외를 잡아주는 어노테이션이다.

18. 세션과 JWT 인증 방식에 대해 각각 설명하세요.

A. 세션은 보안이 필요한 부분들을 암호화하여 저장한다고 할 수 있다. 세션을 설명하기 전에 쿠키와 세션의 개념에 대해 알아야 하는데, 쿠키는 휘발성이 있지만, 세션의 경우 키-값에 대하여 일치 여부를 판단하며, 보안에 직접적으로 중요한 부분을 담당한다.

JWT방식의 경우, 토큰으로 인증을 한다.

19.Spring Boot에서 프로파일(Profile)이란 무엇인가요?

​ A. 스프링 부트에서 서로다른 환경에서 사용하기 위해 쓰이는 yaml, properties 파일같은 것들을 의미한다.

20. 스프링 시큐리티 동작 원리에 대해 아는대로 설명하세요.

A. 인증, 인가, 보안을 담당하는 하위 프레임 워크이다.
8 changes: 8 additions & 0 deletions _posts/2024-09-11-diary.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#공부할게 너무 많다.
솔직히 한탄하는 마음이긴하다.
내가 해야할 일은 대강 이렇다.

##1. 정보처리기사 준비
##2. 이력서 준비
##3. 수업 듣고나서 복습
##4. 포트폴리오 수정 및 보완
21 changes: 21 additions & 0 deletions _posts/2024-09-14-dailyposts.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class BiCycle{
String define_me(){
return "a vehicel with pedals.";
}
}

class MotorCycle extends BiCycle{
String define_me(){
return "a cycle with an engine.";
}
MotorCycle(){
System.out.println("Hello I am a motorcycle, I am "+ define_me());
String temp=super.define_me();
System.out.println("My ancestor is a cycle who is "+ temp );
}
}
class Solution{
public static void main(String []args){
MotorCycle M=new MotorCycle();
}
}
21 changes: 21 additions & 0 deletions _posts/2024-09-14-hackerTestMethod02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
class BiCycle{
String define_me(){
return "a vehicel with pedals.";
}
}

class MotorCycle extends BiCycle{
String define_me(){
return "a cycle with an engine.";
}
MotorCycle(){
System.out.println("Hello I am a motorcycle, I am "+ define_me());
String temp=super.define_me();
System.out.println("My ancestor is a cycle who is "+ temp );
}
}
class Solution{
public static void main(String []args){
MotorCycle M=new MotorCycle();
}
}
77 changes: 77 additions & 0 deletions _posts/2024-10-07-java-dev.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# 빌트인 타입의 실제 값
values = [
42, # int
3.14, # float
1 + 2j, # complex
True, # bool
"Hello, World!", # str
[1, 2, 3], # list
(1, 2, 3), # tuple
{1, 2, 3}, # set
{"a": 1, "b": 2, "c": 3}, # dict
b"Hello, World!", # bytes
bytearray(b"Hello, World!"), # bytearray
memoryview(b"Hello, World!"), # memoryview
range(10), # range
None # NoneType
]
# 번호를 매겨서 실제 값과 타입을 출력하는 코드
for index, value in enumerate(values, start=1):
print(f"{index}. {value} - {type(value)}")

자바 코드

정적변수, 인스턴수 변수, 생성자, 인스턴스 메서드, 정적 메서드, 정적 메서드에서 정적 변수 처리
public class Main {
public static void main(String[] args) {
Car car1 = new Car("Tesla");
Car car2 = new Car("Hyundai");

car1.accelerate(50);
car2.accelerate(30);

System.out.println(" : " + Car.getTotalCars()); 총 차량 수

Car.resetTotalCars();
System.out.println(" : " + Car.getTotalCars()); 초기화 후 총 차량 수
}
}
class Car {
// 인스턴스 변수
private String model;
private int speed;

// 정적 변수
private static int totalCars = 0;

// 생성자
public Car(String model) {
this.model = model;
this.speed = 0;
totalCars++; // 정적 변수 증가
}

《 》 Java , , 의 클래스 객체 변수와 메서드 복습
// 인스턴스 메서드
public void accelerate(int increment) {
speed += increment;
System.out.println(model + " : " + speed + "km/h"); 속도 증가
}

// 정적 메서드
public static int getTotalCars() {
return totalCars;
}

// 정적 메서드에서 정적 변수 처리
public static void resetTotalCars() {
totalCars = 0;
System.out.println(" "); 총 차량 수 초기화
}
}
출력값:
Tesla : 50km/h 속도 증가
Hyundai : 30km/h 속도 증가
총 차량 수: 2
총 차량 수 초기화
초기화 후 총 차량 수: 0
81 changes: 81 additions & 0 deletions _posts/2024-10-09-Python-slice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
문자열 슬라이싱

파이썬에서 문자열 슬라이싱은 문자열의 특정 부분을 추춣하는 기법이다.



인덱스를 사용하여 접근할 수 있다. 콜론을 사용하여 인덱스 범위를 지정한다.



문자열을 자른다고 표현한다.

substring = string[start:end]

start : 인덱스의 시작

end: 인덱스의 끝

print(substring)



string = "Hello World!"

sliced_variable = string[0 : 5] # 'Hello' -> 0~4까지만

두번째 인덱싱 즉 마지막 인덱싱은 포함하지 않는다.(Hello)



string = "Hello, World!"

substring = string[7:] #World!



substring = sting[:5] #'Hello'



substring = string[ -6: -1] #World -> 느낌표는 제외



Step



substring[::2]

2씩 건너뛰겠다는 의미

Hello, World!

H^l^o ^o^l^!



str1 = "Hello, World!"

str2 = "Python Programming"

str3 = "This is an example"



part1 = str1[:5] #Hello

part2 = str2[7:18] # Programming

part3 = str3[-4:] #mple



result = part1 + part2 + part3

print(result)



결과: HelloProgrammingmple
Loading

0 comments on commit b2b6444

Please sign in to comment.