[HTTP란?] - HyperText Transfer Protocol - 서버와 클라이언트가 인터넷 상에서 데이터를 주고받기 위한 규약 [HTTP 작동 방식] - 서버/클라이언트 모델을 준수함- 장점- 불특정 다수를 대상으로 하는 서비스에 적합- 계속 연결된 형태가 아니므로 클라이언트와 서버 간의 최대 연결 수보다 훨씬 많은 요청과 응답을 처리할 수 있음- 단점- 연결을 끊어버리므로 클라이언트의 이전 상황을 알 수 없음 : Stateless(무상태)- 정보를 유지하기 위해 Cookie와 같은 기술이 등장함 [URL] - Uniform Resource Location - 특정 웹 서버의 특정 파일에 접근하기 위한 경로 혹은 주소 [HTTP 동작] 1. 연결 - 클라이언트와 서버 연결2. 요청 Request..
간단한 웹 서버 만들기 기본적으로 내장된 http 모듈을 사용하여 웹 서버 기능을 담당하는 서버 객체를 만들 수 있음 require("http") const http = require("http") const server = http.createServer() const port = 3000 server.listen(port, function() { console.log("시작됨 %d", port) }) createServer() : 웹 서버 객체 생성, 매개변수로 요청 / 응답에 대한 콜백 함수 등록 const server = http.createServer(function(req, res) { res.write("asdf") res.end() }) listen() : 서버 실행, 대기 close() ..
[주소 문자열과 요청 파라미터 다루기] - url 모듈을 이용해 주소 문자열을 객체로 만들면 문자열 안에 있던 각각의 정보를 나누어 그 객체의 속성으로 보관한다. - https://www.asdf.com?query=actor- protocol : "https"- host : "www.asdf.com"- query : "query=actor"- require('url')- parse() : 주소 문자열을 파싱하여 URL 객체를 만들어줌- format() : URL 객체를 주소 문자열로 변환 const url = require("url")const curUrl = url.parse("http://www.asdf.com")console.log(curUrl.protocol) //http:console.log(c..
[자바스크립트의 객체와 함수 이해하기] - 자바스크립트에서는 자료형을 명시하지 않는다. - var 키워드를 사용하여 변수를 선언 - 자바스크립트의 자료형- Boolean : 기본 자료형. True / False- Number : 기본 자료형. 64비트, 정수나 부동소수 값, NaN / +INF / -INF- String : 기본 자료형. 문자열- undefined : 값을 할당하지 않은 변수의 값- null : 존재하지 않는 값을 가리키는 값- Object : 객체를 값으로 가짐- typeof 연산자로 변수의 타입 확인- parseInt(), parseFloat() : 문자열을 숫자로 변환하는 메소드 var person = {}person["age"] = 24person.name = "Presto" - ..
[전역 객체] - 코드의 어느 부분에서나 사용 가능함 - console : 콘솔 창에 결과를 보여주는 객체- process : 프로세스의 실행에 대한 정보를 다루는 객체- exports : 모듈을 다루는 객체 [console 객체] - log() : 문자열을 매개변수로 전달하여 콘솔에 그대로 출력- 형식 문자 사용 가능- %d, %s- %j : JSON 객체로 인식console.log("%j", {"name": "Presto"}) - 자바스크립트의 함수는 항상 값을 반환하도록 되어 있음 - 값을 반환하는 코드를 넣지 않으면 undefined를 반환 : 값이 존재하지 않는다, null과 다름 - dir(object) : 자바스크립트 객체의 속성 출력- time(id) : 실행 시간을 측정하기 위한 시작 시..
원문 : https://medium.com/@jpetrichsr/three-swift-anti-patterns-6c96cf99ea9 [시작] - Swift는 옵셔널, 일급 객체로서의 함수, 고차 함수, 익스텐션과 두 개 이상의 반환값 등 강력한 기능을 제공하지만, 이것이 당신에게 잘못된 습관을 심어줄 수 있다. [강제 옵서녈 래핑 Force Unwrapping Optionals] - 프로토콜을 구현할 때 강제 옵셔널 래핑을 사용하여 구현하는 것은 그 부분에 fatalError() 코드를 작성하는 것과 같다고 할 수 있다. - 프로토콜을 준수함으로서 구현해야 하는 함수가 옵셔널로 되어 있는 인자를 가지고 있다면, 적절한 방법(if let, guard 등)을 사용하여 이 경우를 해결해야 한다.- 안전한 구현..
[시작] - 참조 타입의 경우 하나의 인스턴스가 참조를 통해 여러 곳에서 접근되므로 메모리 해제 시점이 매우 중요하다.- 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원을 낭비하게 되며, 이는 성능 저하로 이어진다.- Swift는 프로그램 메모리 사용을 관리하기 위해 ARC(Automatic Reference Counting)라는 것을 사용한다. [ARC란] - Automatic Reference Counting - 자동으로 메로리를 관리해줌- 더이상 필요하지 않은 클래스의 인스턴스를 메모리에서 해제하는 식으로 작동한다. - 가바지 컬렉션 기법과의 차이 : ARC는 컴파일 시 참조를 계산하므로, 인스턴스가 언제 메모리에서 해제될지 예측하기 쉽고 메모리 관리를 위한 추가 자원을 할당할 필요..
[시작] - 특정 패턴과 결합하여 조건을 추가하는 역할 [where 절의 활용] - 패턴과 결합하여 조건을 추가하거나, - 타입에 대한 제약을 추가할 때 사용 let tuples: [(Int, Int)] = [(1, 2), (1, -1), (1, 0), (0, 2)]for tuple in tuples { switch tuple { case let (x, y) where x == y: print("x = y") case let (x, y) where x == -y: print("x = -y") case (let x, let y) where x > y: print("x > y") case (1, _): print("x = 1") case (_, 2): print("y = 2") default: print("..
import java.io.*; class Main{ static long[] d; public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int number = Integer.parseInt(in.readLine()); d = new long[number+1]; System.out.println(solve(number)); in.close(); } static long solve(int n) { if(n == 0) return 0; else if(n == 1) return 1; else if(d[n] > 0) return..
import java.io.*; class Main{ static long[] dZero; static long[] dOne; public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringBuffer stringBuffer = new StringBuffer(); int cases = Integer.parseInt(in.readLine()); int[] values = new int[cases]; for(int i=0;i 0) return dZero[n]; dZero[n] = solve0(n-1) + solve0(n-2..