728x90
📚 Today's TODO
✅ 모든 개발자를 위한 HTTP 웹 기본 지식 섹션 2, 3, 4, 5
📡 새로 알게 된 내용
🗃️ 모든 개발자를 위한 HTTP 웹 기본 지식 섹션 2, 3, 4, 5
- URI: Uniform Resource Identifier
- URL: Uniform Resource Locator
- query: path 뒤에 ?로 시작해서 &로 추가할 수 있음
- http: hyper text transfer protocol
- 무상태 프로토콜 : 무상태로 서버를 만들어서 특정 서버에 의존하지 않도록
- Http는 기본적으로 비연결성을 지니고 있음. 항상 연결되어 있는 게 아니라 요청이 오면 살렸다가 보내면 죽임.
- 장점으로는 서버의 효율성을 높힐 수 있음
- 단점으로는 3 way handshake를 해야하므로 시간이 더 걸림
- ➡️ 그래서 요즘은 지속연결 (Persistent Connections) 로 문제 해결
- 200: 성공, 400: 클라이언트 요청 문제, 500: 서버 문제
- ✨API URL 고민
- URI의 의미가 uniform resource identifier 이니까 Resource를 잘 구분하는 게 중요
- 리소스와 행위는 분리해야한다.
- POST는 단순히 등록하는 것을 넘어서 서버에 변경사항이 생기는 모든 행동을 포함함.
- PUT와 POST의 차이점은 PUT은 여러번 보내도 같은 효과가 보장된다.(멱등) 아예 덮어버리는 것. 갈아치는 것.
- PATCH가 부분 변경하는 것
- Cacheable
- GET, HEAD, POST, PATCH 가능하나
- GET만 사실 실무에서 캐시함.
🪄 코테 문제 언어 바꿔보기
프로그래머스 가사검색 Python ➡️ Java
[Key Functions]
- word.toCharArray() : String을 CharArray로 바꿔줌
- trie.putIfAbsent(length, new Trie()); : HashMap 에 없으면 넣어줌
- node.children.containsKey(q) : HashMap 의 Key에 있으면 넣어줌
- new StringBuilder(query).reverse().toString() : String에서 index의 char 찾아줌
- HashMap
- get(idx)
- put( )
더보기
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class TrieNode {
public int count = 0;
public HashMap<Character, TrieNode> children;
public TrieNode() {
this.count = 0;
this.children = new HashMap<>();
}
}
class Trie {
TrieNode root;
public Trie() {
this.root = new TrieNode();
}
public void insert(String word){
TrieNode node = root;
for(char c: word.toCharArray()){
node.children.putIfAbsent(c, new TrieNode());
node = node.children.get(c);
node.count++;
}
}
public int search(String query){
TrieNode node = root;
for (char q : query.toCharArray()) {
if (q == '?'){
return node.count;
}
if (!node.children.containsKey(q)){
return 0;
}
node = node.children.get(q);
}
return node.count;
}
}
class Solution {
public List<Integer> solution(String[] words, String[] queries){
Map<Integer, Trie> trie = new HashMap<>();
Map<Integer, Trie> reversedTrie = new HashMap<>();
List<Integer> answer = new ArrayList<>();
for (String word : words){
int length = word.length();
trie.putIfAbsent(length, new Trie());
reversedTrie.putIfAbsent(length, new Trie());
trie.get(length).insert(word);
reversedTrie.get(length).insert(new StringBuilder(word).reverse().toString());
}
for (String query : queries){
int length = query.length();
if (!trie.containsKey(length)){
answer.add(0);
continue;
}
if (query.charAt(length - 1) == '?' && query.charAt(0) == '?'){
int total = 0;
for (TrieNode t : trie.get(length).root.children.values()) {
total += t.count;
}
answer.add(total);
continue;
}
int result;
if (query.charAt(0) == '?'){
result = reversedTrie.get(length).search(new StringBuilder(query).reverse().toString());
}
else {
result = trie.get(length).search(query);
}
answer.add(result);
}
return answer;
}
}
👻 오늘 하루 복기
오늘 맹구 가챠 뽑았음..ㅎㅎ 야호~
오늘은 좀 개념에 집중해 봤다. 정처기도 나갈 준비할 때나 틈틈히 영상을 틀어놓고 있는데 pipe filter 패턴에 대해서 봤는데 헉! 싶었다. map을 통해서 filter를 사용하기 좋아하시는 분이 계셨는데 그 이론이었다. 배우는게 많다.
728x90
'TIL' 카테고리의 다른 글
TIL - 웹 지식, reranking (1) | 2025.01.21 |
---|---|
TIL - HTTP 웹 기본 지식 (0) | 2025.01.20 |
TIL - Servlet, Request, Response (0) | 2025.01.17 |
TIL - Servlet (0) | 2025.01.16 |
TIL - Steamlit (0) | 2025.01.15 |