1.새로고침이 필요할 경우 window.location.reload()를 사용할 수 있다.
2.useRef를 사용해 modal 외부 클릭을 감지할 수 있다.
에제는 usehooks.com/useOnClickOutside에서 찾아볼 수 있다.
3.삼항연산자를 통해 {boolean ? <divs/> : null}형식으로 자주 사용하지만 and연산자를 통해 {boolean && (<divs/>)}도 동일한 기능을 한다.
4.HTTP는 통신 상대를 확인하지 않기 때문에 리퀘스트가 오면 리스폰스를 반환하는 구조로 되어있기 때문에 상대방에게 이 정보를 보내야 하는지에 대한 확신을 가질 수 없고 DDos공격에 취약하지만
HTTPS에서는 SSL이 증명서 역할을 하기 때문에 상대방에 대한 식별이 가능하다.
5.HTTP는 정보의 정확성을 확인할 수 없기 때문에 리스폰스가 왔을 때 변조가 되었는지 확인할 수 없다.
Man in the Middle이라고 불리는 공격방식으로
중간에 리소스와 리퀘스트를 확인한 다음 양방향으로 허위정보를 제공해
서버와 클라이언트 모두 정상 소통이라고 착각하게 만든다.
HTTP에서는 이를 막기 위한 방법으로 서명, 해시를 통한 확인 등을 진행하지만 이 또한 적절하게 변조할 경우 확인할 방법이 없기 때문에 HTTP로는 완전성을 보증할 수 없다.
6.HTTPS는 HTTP에 통신의 암호화, 증명, 완전성 보호등의 기능을 제공하여 결제, 로그인, 보안 등의 필수적 기능등에 사용된다.
HTTPS는 HTTP와 많이 다를 것이라고 생각할 수 있지만
통신 소켓부분을 SSL 또는 TLS라는 프로토콜로 대체했을 뿐이다.
HTTP는 TCP와 직접소통을 하지만 HTTPS는 HTTP <-> SSL <-> TCP와 같은 형태로 소통한다.
7.SSL은 하이브리드 공개키 암호화 방식을 사용하고 있는데
이중 공통키 방식은 하나의 키를 주고받으며 암호화/복호화를 하기 때문에
중간에 탈취당할 경우 보안에 치명적인 단점이 있다.
공개키 방식은
전송 전 상대방이 가지고 공개하는 키를 가지고 암호화 한 다음
받은 본인은 가지고 있는 비밀키로 복호화 하는 방식이다.
간단하게 설명하면 A(Client), B(Server)가 있다고 할 때
A에서 Request를 B로 보낼 때는 B가 공개한 공개키를 가지고 암호화한다.
Request를 받은 B는 본인이 가진 비밀키로 복호하 한 다음
A가 공개한 키를 가지고 암호화 한 다음 A에게 Response를 보낸다.
Response를 받은 A는 본인이 가진 비밀키로 복호화를 한다.
하지만 공개키 방식으로 할 때는 처리가 느리기 때문에
HTTPS는 공통키를 주고 받을 때만 공개키로 처리하며
그 이후로는 공통키로 데이터를 처리하는 하이브리드 시스템을 사용한다.
8.컴퓨터는 물리적 기계장치인 하드웨어와 내부에서 동작을 제어하는 소프트웨어로 나눌 수 있다.
하드웨어에는 사람의 뇌에 해당하는 CPU(중앙처리장치)가 있으며
산술논리연산장치(ALU), 제어장치, 레지스터 등으로 구성되어있다.
기억장치는 주기억장치와 보조기억장치로 나뉘며
이름과는 다르게 주기억장치가 RAM 등이며
보조기억장치에 하드디스크 등이 속한다.
9.시스템 버스는 하드웨어를 물리적으로 연결하는 선으로
용도에 따라 데이터, 주소, 제어버스로 나뉜다.
데이터 버스는 양방향으로 데이터를 전송하는 버스이며
주소 버스는 주소를 통지하기 위한 단방향 버스이고
제어 버스는 명령을 내리는 목적이라 단방향이라고 생각할 수 있지만
컴퓨터는 읽기->처리->저장 순서로 작업하기 때문에
중앙처리장치에서 기억장치와 소통을 해야 한다.
(1).백준 2965 캥거루 세마리는 점프하는 캥거루들의 규칙에 따라
최대 몇번의 점프가 가능한지를 묻는 문제였다.
이분탐색느낌으로 범위가 좁혀지는 상황이었는데
중앙지점이 아닌 최 외곽-1로 범위를 좁힌다면
사이에 들어있는 공간의 갯수만큼 이동이 가능했다.
a,b,c 오름차순으로 정렬된 위치에서 b-a, c-b의 차이 중 큰 것을 택했다.
let input = `3 5 9`.split(' ').map(Number)
console.log(Math.max(input[2]-input[1],input[1]-input[0])-1)
(2).프로그래머스 콜라 문제는 예전에 유행했던 콜라문제의 변형으로
n개의 빈병이 있을 때 a개의 빈경을 b개의 콜라로 바꿔준다면 몇개의 콜라를 마실 수 있는가에 대한 문제였다.
while을 사용해 나머지가 없을 때 까지 반복처리했다.
function solution(a, b, n) {
let answer = 0;
let bottle = n
while(bottle >= a){
let num = Math.floor(bottle/a)
answer += num * b
bottle = bottle%a + num*b
}
return answer
}
(3).프로그래머스 푸드 파이트 대회는 특정 문자열의 갯수를 2로 나눠 앞뒤로 추가하는 느낌이었는데 방법은 두가지가 있었다.
문자열을 0으로 시작한 후 역순으로 앞뒤에 추가해 붙여나가기
문자열을 ''으로 시작한 후 순서대로 추가한 다음 0, reverse()추가하기
function solution(food) {
let answer = '';
for(let i = 1 ; i < food.length ; i++){
answer += String(i).repeat(Math.floor(food[i]/2))
}
return `${answer}0${answer.split('').reverse().join('')}`
}
(4).프로그래머스 옹알이(2)는 aya, ye, woo, ma밖에 발음하지 못하는 아기가 제공된 단어 중 발음할 수 있는 갯수를 구하는 문제였다.
치환 방식으로 진행했을 때 오류가 생겼는데
예전 햄버거 문제와 같이 순차적으로 확인하지 않고 중간 값들이 잘라져버려 생기는 문제였다.
이를 해결하기 위해 중간값에 '0'을 추가했으며(숫자도 포함된 경우 공백도 좋을 것 같다) 마지막에 0을 제거한 다음 결과와 빈 문자열을 비교해 모든 발음을 수행했는지를 확인했다.
추가적으로 동일한 발음을 연달아 하지 못하기 때문에 'ayaaya', 'yeye', 'woowoo', 'mama'가 포함되어있는지를 먼저 체크해 만약 포함되어 있다면 continue 처리를 했다.
function solution(babbling) {
let answer = 0;
let cantsay = ['ayaaya','yeye','woowoo','mama']
for(let i = 0 ; i < babbling.length ; i++){
if(babbling[i].includes(cantsay[0]) || babbling[i].includes(cantsay[1]) || babbling[i].includes(cantsay[2]) || babbling[i].includes(cantsay[3])) continue
if(babbling[i].split('aya').join('0').split('ye').join('0').split('woo').join('0').split('ma').join('0').split('0').join('') === ''){
answer++
}
}
return answer;
}

'회고' 카테고리의 다른 글
| [취업준비일지] - 19 (0) | 2022.11.08 |
|---|---|
| [취업준비일지] - 18 (0) | 2022.11.07 |
| [취업준비일지] - 16 (0) | 2022.11.05 |
| [취업준비일지] - 15 (0) | 2022.11.04 |
| [취업준비일지] - 14 (0) | 2022.11.03 |
