[항해99 취업 리부트 코스 학습일지] 3기 18일차 TIL(부제: 바쁘다. 그리고 CS공부!)
안녕하세요! delay100입니다.
오늘은 아침에 시험 4문제를 ..ㅜㅜ푸는 날이었어요.. 3문제..밖에 못 풀었어요..
마지막 문제가 .. 정석풀이가 이분탐색 + BFS으로 푸는 문제더라구요.. 어려워..
이분탐색이랑, BFS는 좀 알았다고 생각했는데 붙혀놓으니까 잘 모르겠어요..너무 어렵네요..
끝나고 팀원분의 설명을 들었는데 BFS만으로도 풀이가 가능하더라고요!
그리고 이후에는 CS팀스터디 하기로한거 했어요! 약 1시간정도 ..? 한거같네용
팀 스터디 이후에는 바로 저녁먹고 기술매니저님과 며칠전에 못했던 스터디를 했어요!
그리고 .. 마저 스터디해서 약 3시간동안 스터디만 했네요 ..세상에
이제 며칠전에 못 풀었던 BigInteger쓰는 문제를 풀려합니닷...
이 문제(https://www.acmicpc.net/problem/11834)에요
그리고 내일 CS스터디는 내일.. 준비하고 .. 조금 쉬다가 잠을 자러 갈려합니다...!!!
Q. 팀원끼리 한 면접용 CS 스터디
A1. 프록시(Proxy)
프록시 역할 자체가 내부망(내부 구현)을 모르게 숨기는 것
[프록시의 종류]
1. 포워드 프록시 - 사용자가 직접 요청하는 프록시
2. 리버스 프록시 - 클라이언트(프론트)가 서버쪽에서 받을때 쓰는 프록시
A2. 프록시 VS VPN
트래픽 처리 방식: 프록시는 특정 애플리케이션(예: 웹 브라우저)의 트래픽만 처리하는 반면, VPN은 모든 인터넷 트래픽을 처리합니다.
암호화: VPN은 모든 트래픽을 암호화하지만, 프록시는 일반적으로 암호화 기능이 없습니다.
프라이버시: 둘 다 IP 주소를 숨기지만, VPN은 전체 트래픽을 암호화하여 더 나은 프라이버시를 제공합니다.
사용 목적: 프록시는 주로 캐싱, 필터링, IP 주소 숨기기 등의 용도로 사용되며, VPN은 보안 강화, 지리적 차단 우회, 안전한 원격 접속 등의 용도로 사용됩니다.
A3. 싱글톤 패턴
A4. 동기(sync), 비동기(async)
기다릴거면 동기, 안기다릴거면 비동기
동기(sync)는 작업을 시키는 쪽에서 작업을 하는 애가 끝날때까지 기다림(작업을 시킨애가 작업을 하는 애가 끝날때까지 살아있는게 보장되어있음) , sync는 제어권이 개발자에게 있음
"작업에 관심이 있느냐 없느냐"
ex) 메인쓰레드에서 서브쓰레드한테 일을 맡김
블로킹(blocking)은 제어권이 개발자의 의도에 상관없이 호출이 끝나기를 기다려야하는 것.
ex) 자바에서 메소드를 호출했을 때 그 메소드가 끝날때까지 기다려야하는 것(다른 메소드 실행 불가)
동기 멀티쓰레드 : 동기적으로 처리할거면 SUB쓰레드가 끝날때까지 기다림
CPU 코어 4: 4개의 쓰레드(4개의 일)가 있는 것
쓰레드를 여러개 만들어서 1/4씩 처리
+ 자바랑 자바스크립트는 동기, 비동기처리를 어떻게 하기로 했냐?
동기 vs 비동기 / blocking vs nonblocking 의 4가지 조합을 각각 상황에서 어떻게 하는지?
JAVASCRIPT : 비동기적 블로킹 | JAVA : 동기적 블로킹
- 자바 (Java):
- 동기적 블로킹 (Synchronous Blocking):
- 일반적으로 자바에서는 동기적인 방식으로 블로킹 호출을 수행합니다. 즉, 호출된 메서드가 완료될 때까지 현재 스레드는 차단됩니다. 이는 주로 I/O 작업이나 데이터베이스 쿼리와 같은 작업에 적합합니다. 동기 방식은 단순하고 직관적이며, 에러 처리가 더 쉽습니다.
- 동기적 블로킹 (Synchronous Blocking):
- 자바스크립트 (JavaScript):
- 비동기적 블로킹 (Asynchronous Blocking):
- 자바스크립트에서는 이벤트 루프를 통해 비동기적으로 블로킹 호출을 수행합니다. 예를 들어, setTimeout 또는 XMLHttpRequest와 같은 함수는 비동기적으로 작동하며, 이벤트 루프를 통해 콜백 함수를 실행합니다. 이러한 방식은 브라우저 환경에서 네트워크 요청이나 파일 로딩과 같은 I/O 작업을 수행할 때 유용합니다.
- 비동기적 블로킹 (Asynchronous Blocking):
멀티쓰레드도 종류가 여러개인데, 하나의 CORE에 쓰레드가 여러개일수도있고 하나의 CORE각각에 쓰레드가 있을수도 있습니다.
https://www.youtube.com/watch?v=IdpkfygWIMk
A5. 동시성, 병렬성
병렬성과 동시성은 다르다!
동시성은 1.여러개의 CORE에서 동시에 시키는 것, 2. 쓰레드가 여러개있지만 한 순간에는 하나만 실행되는 것의 두가지의 의미가 있습니다.
병렬성은 진짜 같은 시간에 두개가 실행 되는 것입니다.
멀티쓰레드를 사용하더라도 병렬적으로 실행될 때가 있고, 아닐 때가 있다.
A6. 스트림 팁
https://www.acmicpc.net/problem/16120
ArrayDeque<String> deq = new ArrayDeque<>(Arrays.stream(reader.readLine().split("")).collect(Collectors.toList()));
writer.write(answer.stream().filter(Objects::nonNull).collect(Collectors.joining()).equals("P") ? "PPAP" : "NP");
Q2. 멘토님과 16일차에 못했었던 추가스터디 내용
A1.
우선순위큐는 기본형이 오름차순임
A2.객체지향 프로그래밍 설계 5원칙
단일 책임 원칙, 개방-폐쇠 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 역전 원칙
A3. 면접에서 CS보다는 java, spring 내용만 알아도 됨
면접 질문할 시간이 생각보다 많지 않음
[추가 면접질문]
1. http, https
2. 사용자가 요청 보냈을때 서버까지의 동작
항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
[할인]란에 “추천왕 3기 백지연” 입력 시 10만원 할인
(*얼리버드, 타 혜택 중복 적용 가능)