42746
날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42746.py at main · Junroot/Algorithm 풀이 두 수 a,b가 있을 때, a*(10^len(b)) + a > b*(10^len(a)) + a이면 최대값은 항상 a가 b보다 먼저 온다는 것을 증명할 필요가 있다. 따라서, a와 b를 이어붙이고 뒤집어본 다음 더 큰 경우의 순서대로 수가 나열되면 가장 큰 값이 나온다는 뜻이다.
날짜: 2022년 1월 31일 오후 5:51 코드 Algorithm/42746.py at main · Junroot/Algorithm 풀이 두 수 a,b가 있을 때, a*(10^len(b)) + a > b*(10^len(a)) + a이면 최대값은 항상 a가 b보다 먼저 온다는 것을 증명할 필요가 있다. 따라서, a와 b를 이어붙이고 뒤집어본 다음 더 큰 경우의 순서대로 수가 나열되면 가장 큰 값이 나온다는 뜻이다.
서버가 찻주전자이기 때문에 커피 내리기를 거절했다는 것을 의미한다. 이 오류는 1998년 만우절 농담이었던 하이퍼 텍스트 커피 포트 제어 규약(Hyper Text Coffee Pot Control Protocol)의 레퍼런스다.
편집 시간: 2022년 2월 7일 오후 8:37 코드 Algorithm/4153.py at main · Junroot/Algorithm 풀이 딱히 생각할 필요없이 피타고라스 정리로 비교하면 된다.
문제 상황 GET 요청에 query가 길어지면서, URI가 길어지니 Nginx에서 414 URI Too Large가 발생했다. 원인 분석 Nginx에는 large_client_header_buffers number size 설정값이 존재한다. 요청 헤더를 읽을 때 사용할 버퍼의 개수와 크기를 설정한다. request line이 버퍼 하나의 크기를 초과하면 414 응답이 발생한다. requet line: 요청 메시지의 첫번 째 줄 예시: GET /software/htp/cics/index.html HTTP/1.1 요청 헤더가 버퍼 하나 크기를 초과하면 400 응답이 발생한다. 기본값은 number=4, size=8k 다. 해결 방법 large_client_header_buffers 설정 값을 조절하여 해결한다....
클래스 계층 정의 코틀린 인터페이스 코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 상위 클래스나 상위 인터페이스에 있는 프로퍼티나 메소드를 오버라이드할 때는 override 변경자를 붙여줘야 된다. 실수로 상위 클래스의 메소드를 오버라이드하는 경우를 방지해준다. 한 클래스에서 두 인터페이스를 함께 구현했을 때, 같은 디폴트 메소드가 있다면 컴파일 오류가 발생한다. 이 경우는 하위 클래스에 직접 구현하게 강제한다. 상위 타입의 메소드 호출하는 방식은 아래를 참고한다. class Button : Clickable, Focusable { override fun click() { println("I was Clicked") } override fun showOff() { super<Clickable>....
컴포넌트 컴포넌트: 시스템의 구성 요소로 배포할 수 있는 가장 작은 단위. 자바의 jar, 루비의 gem, 닷넷의 DLL… 여러 컴포넌트를 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있다. 또는, 여러 컴포넌트를 서로 묶어서 .war 파일과 같은 단일 아카이브로 만들 수도 있따. 또는 컴포넌트 각각을 .jar나 .dll같이 독적으로 로드할 수 있는 플러그인이나 .exe 파일로 만들어서 독립적으로 배포할 수도 있다. 컴포넌트의 간략한 역사 소프트웨어 개발 초창기에는 메모리에서의 프로그램 위치와 레이아웃을 프로그래머가 직접 제어했다....
추상화: 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것 복잡성을 숨기기 위해 사용되는 단순한 형식 객체는 여러 형태로 추상화해서 표현할 수 있다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지 결정해야 한다. 프로그래밍에서는 다음과 같은 목적으로 추상화를 사용한다. 복잡성을 숨기기 위해 코드를 체계화하기 위해 만드는 사람에게 변화의 자유를 주기 위해 함수 내부의 추상화 레벨을 통일하라 계층이 잘 분리되었을 때 장점 어떤 계층에서 작업할 때 그 아래의 계층은 이미 완성되어 있으므로, 해당 계층만 생각하면 된다....
좋은 단위 테스트 스위트의 특성 개발 주기에 통합돼 있다. 코드베이스의 가장 중요한 부분만을 대상으로 한다. 최소한의 유지비로 최대 가치를 끌어낸다. 가치있는 테스트를 작성하려면 가치있는 테스트를 식별할 수 있어야 한다. 좋은 단위 테스트의 4대 요소 자세히 살펴보기 좋은 단위 테스트 네 가지 특성 회귀 방지 리팩터링 내성 빠른 피드백 유지 보수성 첫 번째 요소: 회귀 방지 회귀: 코드를 수정한 후 기능이 의도한 대로 작동하지 않는 경우 회귀 방지 지표에 대한 테스트 점수가 얼마나 잘 나오는지 평가하려면 다음 사항을 고려해야 한다....
접근 패턴: 애플리케이션이 MySQL을 사용하여 데이터에 접근하는 방법이다. 접근 패턴을 변경하면 MySQL 성능에 큰 영향을 미치지만, 일반적으로 다른 최적화보다 더 많은 노력이 필요하다. MySQL 성능은 애플리케이션이 MySQL을 어떻게 사용하냐에 의해 제한되는 것이지 그 반대는 아니다. MySQL은 아무것도 하지 않는다 애플리케이션이 유휴 상태일 때는 MySQL은 유휴 상태이고, 애플리케이션이 바쁘게 쿼리를 실행 중이면 MySQL도 바쁘게 해당 쿼리를 실행 중이다. MySQL에는 “페이지 플러싱” 같은 몇 가지 백그라운드 작업이 있지만, 실제로 백그라운드 작업은 쿼리를 실행하는 포그라운드 작업을 허용하여 느린 작업을 지연 작업을 지연하거나 방지함으로써 성능을 향상시킨다....
스프링 시큐리티 활성화하기 Spring 자동 구성을 이용하여 활성화한다. https://www.baeldung.com/spring-boot-security-autoconfiguration 아래 의존에는 SecurityAutoConfiguration 클래스가 포함되어 있어서, 자동으로 시큐리티 구성이 된다. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> Spring 자동 구성은 다음과 같이 구성된다. 모든 HTTP 요청 경로는 인증되어야 한다. 어떤 특정 역할이나 권한이 없다. 스프링 시큐리티의 기본 HTTP 기본 인증을 사용해서 인증된다. 사용자는 하나만 있으며, 이름은 user다. 비밀번호는 암호화해 준다. 시큐리티가 활성화되면 기본적으로 설정되는 프로퍼티가 있다. spring.security.user.name spring.security.user.password 따로 설정하지 않았으면 비밀번호가 랜덤으로 생성되면 콘솔 로그에 출력된다....
데이터 링크 계층이 역할과 이더넷 데이터 링크 게층은 네트워크 장비 간에 신호를 주고받는 규칙을 정하는 계층이다. LAN에서 데이터를 정상적으로 주고받기 위해서 데이터 링크 계층에 이더넷을 주로 사용한다. 이더넷에 목적지 정보(MAC주소)를 추가해서 자신의 데이터가 아니면 무시하도록 설계되어있다. 이더넷은 여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 일어나지 않는 구조로 되어있다. 동시에 케이블이 지나가면 충돌하기 때문에 데이터를 보내는 시점을 늦추는 방법을 사용한다. 이를 CSMA/CD(Carrier Sense Multiple Access with Collision Detection)라고 부른다. CS: 데이터를 보내려고 하는 컴퓨터가 케이블에 신호가 흐르고 있는지 확인한다....
ASCII 7비트로 영문자만 처리하는 문자 인코딩 대다수 컴퓨터가 8비트인 바이트 단위를 사용하므로, ASCII 문자를 저장하고 비트를 하나 더 확보할 수 있었다. 워드스타에서는 32미만인 코드는 인쇄 제어 목적으로 사용했다. IBM PC는 OEM 문자집합을 고안했는데, 이는 유럽 언어를 위한 몇몇 강조문자와 선그리기 문자를 사용할 수 있었다. 하지만 미국 이외의 지역에서 PC를 판매하기 시작하면서 온갖 OEM 문자 집합 형식이 나오기시작했으며, 각자 요오에 맞춰 128글자를 정의했따. ANSI 표준 위원회에서느 ANSI 표준을 체계적으로 정리함에 따라 OEM 난투극이 끝났다....
스케줄링의 개요 스케줄링의 단계 CPU 스케줄러: 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 한다. 고수준 스케줄링 장기 스케줄링, 작업 스케줄링이라고도 한다. 전체 시스템의 부하를 고려하여 작업을 시작할지 말지를 결정한다. 이 결정에 따라 시스템의 전체 프로세스 수가 결정되는데 이를 멀티프로그래밍 정도(degree of multiprogramming)라고한다. 중간 수준 스케줄링 시스템에 과부하가 걸려서 전체 프로세스 수를 조절해야 한다면 이미 활성화된 프로세스 중 일부를 보류 상태로 보낸다. 저수준 스케줄링 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 등을 결정한다....
“코드 재사용은 좋다. 바퀴 재발명은 나쁘다"는 항상 맞는 말은 아니다. 적어도 핵심 비즈니스 기능과 목표는 파악한 후 직접 수행해라.
세상에 쉬운 일은 없다 항상 위험을 줄여라 위 둘을 해결하기 위해서는, 구현에 앞서 설계를 해야한다. 설계를 하지 않고 구현하면, 수정하는데 더 많은 시간을 사용할 수 있다. 점진적인 설계과 구현은 좋다. 형식에 지나치게 얽매이는 설계는 시간낭비다.
방법론을 조심하라. 방법론은 쓸만한 수준으로 그저 그런 성능을 내는 데는 괜찮은 방법이 될 수 있지만, 동시에 유능한 인재를 쫓아낼 수도 있다.
자기 업무에 대해 훨씬 더 신중한 태도를 지녀야 한다. 자기가 맡은 업무에 대해 최고 결정권을 가지는 곳이 일하기 좋은 곳이다.
편집 시간: 2022년 4월 20일 오후 5:11 코드 Algorithm/3190.py at main · Junroot/Algorithm 풀이 현재 시간에 회전이 있는지 빠르게 파악하기 위해서 dictionary로 저장했다. 보드 정보를 나타내는 2중 배열을 만들어서 비어있으면 0, 사과가 있으면 1, 뱀이 있으면 2로 표현했다. 뱀의 꼬리를 제거할 때, 가장 끝 부분 정보를 얻기 위해서 덱을 사용했다.
조직 내에서 변화를 시도할 만한 결정권이 없는 사람도 있을 것이다. 혼자라도 하십시오 한 사람의 힘이라도 프로젝트르 개선할 여지가 많다. 입소문의 힘을 이용하십시오 조엘 테스트 중 많은 항복은 팀이 비협조적이더라도 혼자 실천할 수 있다. 그 중 성공적인 항목은 분명히 나머지 팀원에게 퍼지게 돼있다. 우수한 인재를 모으십시오 채용과 인터뷰 업무에 참여하세요. 우수한 인재가 여러분 팀에 합류하도록 홍보해라. 개선할 의지와 능력이 있는 사람을 찾아 같은 편으로 만들어라. 뒤처진 팀원이 있으면 배울 기회를 주세요....
dog fooding: 자기회사 제품을 실제로 사용해 보는 과정 고객 입장에서 제품을 실행해보니 버그가 바로 눈에 띄었다. 고객 입장에서 사용 편의성을 직접 이해할 수 있다.