반응형 전체 글114 [브라우저] CSS 파싱(문맥 자유 문법 O); ◆ CSS파싱 ■ 특징 - 문맥 자유 문법이다. = 규칙이 딱 정해져 있다. = 파서(상향식 또는 하향식)를 통해서 파싱이 가능하다. - 웹킷은 CSS 문법 파일로부터 자동으로 파서 생성을 위해 플렉스와 바이슨 파서 생성기를 활용한다. - 파이어 폭스는 직접 작성한 하향식 파서를 사용한다. - CSS 규칙 객체는 선택자와 선언 객체 그리고 CSS 문법과 일치하는 다른 객체를 포함한다. ■ 스크립트와 스타일 시트 진행 순서 - 스크립트 : 이전 글 브라우저의 동작 원리에서 설명한 것과 같이, 태그를 만나면 문서의 파싱은 중단된다. 네트워크로부터 자원을 가져오는 단계 또한 실시간으로 처리(동기)되고 자원 받을 때까지 파싱은 중단된다. 비동기로 처리하기 위해서는 async, defer옵션을 적절히 사용한다. .. 브라우저 2023. 2. 27. [브라우저] HTML 파서 - 마크업 → 파싱트리(문맥 자유 문법x) ◆ HTML 파서 : HTML 마크업을 파싱 트리로 변환. ■ 특징 - HTML 어휘 및 문법은 W3C 에 명세되어 있음. HTML 5까지 나왔다. - HTML 정의를 위한 공식적인 형식으로 DTD(문서 형식 정의)가 있지만 문맥 자유 문법이 아니다. △ 언어가 유연함 △ HTML 오류에 대한 브라우저의 관대함. △ 변경에 의한 재파싱. 스크립트의 document.write는 토큰을 추가할 수 있기 때문에, 입력 과정에서 파싱이 수정될 수 있따. ■ DOM : Document Object Model : 문서 객체 모델 DOM은 마크업과 1:1의 관계를 맺는다. 예시) DOM은 W3C에 의해 명세가 정해져 있다.(https://www.w3.org/DOM/DOMTR) * HTML 정의 : https://ww.. 브라우저 2023. 2. 26. [브라우저] 파싱이란?(Parsing이란?) - 파싱의 과정(어휘 분석, 구문 분석) ■ 파싱 특정 데이터에서 원하는 데이터만 추출해내는 과정을 '파싱'이라 알고 사용해왔다. 또는 특정 양식의 문서를 원하는 양식으로 변환하는 것을 파싱이라 사용했다. (뇌피셜...) 여기서는 '문서 파싱'은 브라우저가 이해할 수 있는 구조로 코드를 변환하는 작업을 말한다. 파싱의 결과로는 노드트리(=파싱트리=문법트리)가 도출된다. 예시) 2+3-1 와 같은 식은 다음과 같은 트리가 된다. 식은 표현식과 숫자로 이루어져 있으며, 각각은 노드가 된다. △ 문법(파싱의 문법) 문맥 자유 문법 : 파싱은 문서에 작성된 언어 또는 형식의 규칙에 따르는데, 파싱할 수 있는 모든 형식은 정해진 용어와 구문 규칙에 따라야 한다. (쉽게 말해서, 특정 규칙에 따라 작성된 문서들만 파싱이 가능하다. 대부분의 프로그래밍 언어.. 브라우저 2023. 2. 26. [브라우저] 브라우저의 동작 원리 ◆ 브라우저의 동작 원리 브라우저를 켜고, 웹 사이트에 접속하면 일어나는 일에 대해서 알아보겠습니다. ■ 서버로부터 데이터 요청(주로 network 모듈) 1. 브라우저는 DNS서버에 호스트에 해당하는 ip를 요청 2. DNS 서버는 ip를 브라우저에 응답. 3. 웹 브라우저와 서버는 비밀 key를 통해 3Way- Handshake로 데이터 주고 받기 위한 준비 완료. 4. 데이터 요청 : HTTP Reqeust 5. 응답 : HTTP Response ■ 사용자에게 데이터 출력 HTML, CSS, javascript 를 parsing하고 화면에 표시한다. -------------------- Contstruction ---------------------- 1. HTML 파싱 → DOM Tree 생성 2.. 브라우저 2023. 2. 26. [브라우저] 브라우저의 구조 ◆ 브라우저란? 선택한 자원을 서버에 요청하고, 전송 받은 자원을 사용자에게 표시해주는 tool이다. ※ 전송 받은 자원 : HTML, CSS, Javascript, PDF, Image, WASM 등등 - 좀 더 구체적으로 설명하자면, 1. 사용자 인터페이스 영역의 주소창에서 URI(Unified Resource Identifier : 자원 식별자)를 입력한다. 2. 네트워킹 모듈을 통해 HTTP 요청을 보내고, 응답을 받는다.(응답은 자원을 포함한다.) 3. 전송받은 자원은 렌더링 엔진을 통해서 사용자에게 볼 수 있는 형태의 오브젝트로 변환된다.(렌더링) - 브라우저 엔진은 이 때 전송받은 자원을 렌더링 엔진으로 넘겨주는 역할을 한다. * 필요한 경우 자바스크립트 해석기를 통해 자바스크립트 코드를 해석.. 브라우저 2023. 2. 23. [LeetCode] 3. Longest Substring Without Repeating CharactersMedium - Medium https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ Longest Substring Without Repeating Characters - LeetCode Longest Substring Without Repeating Characters - Given a string s, find the length of the longest substring without repeating characters. Example 1: Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: In.. 코딩 테스트 2023. 2. 15. [LeetCode] 2. Add Two Numbers - Medium Medium이라지만 오히려 쉬운듯 하다. 시각화? 가 잘 되어 있어서 문제 이해는 어렵지 않다. 문제 설명 one way의 linkedList가 아래와 같이 정의되어 있다. 순서대로 2,4,3-> 342 5,6,4-> 465 를 의미하며 342+465 = 807을 마찬가지의 형태인 7,0,8을 나타내는 listNode로 리턴해야 한다. 문제 풀이 딱히 풀이라고 할 것도 없다. 10이 넘어가는 경우데 대해서만 잘 처리해주면 된다. 처음에는 isOverTen이라는 boolean을 선언하여 코드를 짰는데, 그보다는 int over 을 정의하여 이전 두 수의 합이 10이 넘을 경우 1, 아니면 0을 담도록 했다. /** * Definition for singly-linked list. * public class.. 코딩 테스트 2023. 2. 15. [LeetCode] 1. Two Sum - Easy 처음 이 문제를 보고 비웃었다. 시간 복잡도 O(n^2)방법은 쉽게 생각해냈지만, 더 나은 방법은 찾아낼 수 없었다. 다른 사람의 솔루션을 보고 O(nlogn)까지 가능하다는 것을 알게 되었다. + HashMap을 사용할 경우 O(n)까지 가능... 심지어 쉬움. 쉬운 문제에서도 배울 점이 있구나... 문제 설명 문제는 간단하다. input : nums = [2,7,11,15], target = 9 output : [0,1] input으로는 정수 배열과, target 숫자가 들어온다. 이 때, 정수 배열에서 서로 다른(index가 다른) 두 원소의 합이 target이 되는 index 배열을 리턴하는 것이다. 제약사항은 아래와 같다. 2 코딩 테스트 2023. 2. 15. [Java] List정렬(sort)/ Collections.sort, List.sort 1. Collections.sort public static void sort(List list) public static void sort(List list, Comparator Java 2023. 2. 11. [프로그래머스] 디스크 컨트롤러 회사에서 코드를 짤 때는 주로, Comparable을 구현해서 활용하거나 Comparator를 생성했다. 다른 코드를 보니까 ㅜ 부족함이 많이 느껴진다. 풀이 - 작업 요청 시간이 지난 작업 중, 작업 시간이 짧은 것부터 처리하도록 한다. -> 작업 시간을 기준으로 우선순위 큐 사용. (대기하는 작업들의 대기 시간을 줄인다는 느낌) 개선점 1. 굳이 객체를 생성할 필요는 없었다. 개선점 2. compare 및 sorting 시에 람다 함수 활용. 더보기 나의 풀이... import java.util.PriorityQueue; import java.util.Comparator; class Solution { public int solution(int[][] jobs) { int size = jobs.len.. 코딩 테스트 2023. 2. 10. [안드로이드] Permission - 권한 허용 요청(requestPermissions)(feat. Kotlin) https://developerpearl.tistory.com/45 [안드로이드] Permission - 권한 확인하기(checkSelfPermission)(feat. Kotlin) 차근차근 가보자. 특정 기능을 실행시키기 위한 권한을 사용자가 이미 허용했는지 안했는지확인하는 방법에 대해서 알아보자. (본 단계 진행을 위해서는 Manifest에 권하는 권한에 대해 추가를 해 developerpearl.tistory.com 위 과정을 거쳐 권한 확인을 했다. 이제 권한을 요청해보자. requestPermissions public static void requestPermissions( @NonNull Activity activity, @NonNull String[] permissions, @IntRange.. 안드로이드 2023. 1. 27. [안드로이드] Permission - 권한 확인하기(checkSelfPermission)(feat. Kotlin) 차근차근 가보자. 특정 기능을 실행시키기 위한 권한을 사용자가 이미 허용했는지 안했는지확인하는 방법에 대해서 알아보자. (본 단계 진행을 위해서는 Manifest에 권하는 권한에 대해 추가를 해야한다.) 권한 확인 : checkSelfPermission public static int checkSelfPermission(@NonNull Context context, @NonNull String permission) ContextCompat.checkSelfPermission()메서드에 확인 원하는 권한 전달→ 권한 여부에 따라 PERMISSION_GRANTED(=0) PERMISSION_DENIED(=-1) 을 리턴한다. -- 권한 확인 private const val PERMISSION_WRITE_ST.. 안드로이드 2023. 1. 27. 이전 1 ··· 3 4 5 6 7 8 9 10 다음 반응형