다시 시작 Tap to restart 386

Q. kafka에서 group_id를 설정하면 어떻게 될까?

A. group id가 같을 경우 한 클라이언트에서만 메시지를 소비(consume)할 수 있다. 테스트를 위한 코드: python kafka - producer and consumer 아래처럼 group_id를 설정한 경우에 consumer를 터미널 창을 두 개 띄워서 테스트할 경우 한쪽에서만 메시지를 받을 수 있다. import kafka consumer = kafka.KafkaConsumer(bootstrap_servers='localhost:9092', group_id='test-group') consumer.subscribe(topics=['quickstart-events']) for msg in consumer: print(msg) group_id를 설정하지 않은 경우에는 양쪽에 같은 메시지가 ..

백엔드 Back-end 2022.04.11

완전 새로운 검색 결과를 얻는 방법, 구글 국가와 언어 설정 다르게 하기

구글에서 주로 검색한다면, 사용하는 브라우저마다 국가와 언어 설정을 다르게 해보세요. 완전 새로운 검색 결과를 얻을 수 있습니다. 한국-한국어로 설정한 사람들과 완전히 다른 정보를 갖게 되실 것입니다. 예를 들어서 구글 크롬을 주로 사용한다면, 파이어폭스는 국가를 미국, 언어를 영어로 설정해보세요. 구글 국가, 언어 설정 바꾸는 법 구글 검색창 오른쪽 아래를 보면 설정이 있습니다. 설정을 누르면 검색 설정이 보입니다. 검색 설정을 누르면 검색결과 메뉴가 보이고 아래쪽에 지역설정이 있습니다. 해당 설정을 미국으로 바꾸고 저장합니다. 다시 설정 -> 검색 설정을 누르고 이번에는 언어를 누릅니다. 언어를 English로 선택하고 저장을 누릅니다. 구글 검색창도 이제 영어로 나옵니다. 검색 비교 예) tdd t..

"자기소개 부탁드려요." "네, 저는 셜록 홈즈입니다."

자기소개는 항상 어렵다. 어떻게 소개하면 기억에 남을까. 면접관의 잠을 깨워주고 내 이야기를 듣게 만들까 고민이 필요하다. 그래서 생각해낸 자기소개 문장! "저는 셜록 홈즈입니다." 면접관이 웃을 수도 있다. 뭔 개소리냐는 표정을 지을 수 있다. 여기서 멈추면 안 된다. 일단 가기로 한 것 끝까지 가야한다. "팀내에서 셜록 홈즈로 불리고 있습니다." 아무도 그렇게 부르는 사람이 없다면 스스로 자꾸 부르자. 그러면 팀원들도 장난으로라도 자꾸 불러주게 되어 있다. "그 이유는 제가 버그와 오류를 잘 잡아내기 때문입니다." 이제 면접관은 잘 들으려고 노력하고 있을 것이다. 아니면... 할 수 없다. "최근에 출근했는데 저희 회사 서비스가 중단된 걸 발견했습니다. 그래서 바로 조사에 들어갔죠. 가장 처음으로 O..

"자기소개 부탁드려요." "네, 저는 잘 훔치는 개발자입니다."

면접을 보면 자기소개하라고 한다. 개발자로서. 처음에 면접볼 때 무슨 말을 해야할지 몰랐다. 그래서 "안녕하세요? OOO입니다."고 끝났다. 아무 의미 없는 소개... 그 다음에는 "안녕하세요? OOOO에서 소프트웨어 엔지니어로 일하고 있는 OOO입니다."라고 하고 끝났다. 이때 정보는 회사, 직책, 이름 3가지다. 회사: 내가 다니는 회사가 구글, 카카오, 네이버도 아니고 회사 이름을 말하는 게 무슨 의미가 있을까. 직책: 어차피 개발자란 말과 다름 없다. 팀장급도 아니고 리드급도 아닌. 역시나 큰 의미 없는 소개... 이래서는 안 되겠다고 생각했다. 뭔가 기억에 남는 게 필요하다는 생각이 들었다. 기억에 남는 한줄. 흥미를 불러 일으키는. 다음 얘기가 궁금한. 그래서 생각해낸 것이... 바로 이것! ..

Q. fork한 github 저장소 브랜치들을 하나만 남기고 일괄 삭제하고 싶다면?

A. shell script를 사용한다. 아래 파일을 내려 받는다. fork한 저장소 디렉터리에 복사한다. $ sh ./remove_branches_except_mine.sh 를 실행하면 브랜치가 모두 삭제된다. 위험하니 꼭 테스트 저장소를 만든 뒤에 해보기를 권한다. #!/bin/bash # 남겨둘 브랜치명 예)dev MY_BRANCH="/dev" SUB="remotes/origin/" branches=`git branch -a` for b in $branches do if [[ "$b" == *"$SUB"* ]] && [[ "$b" != *"$MY_BRANCH" ]] && [[ "$b" != *"main"* ]] then echo $b git push origin --delete ${b/${SUB}/..

개발 Dev/깃 Git 2022.04.03

피보나치 수Fibonacci numbers와 메모이제이션memoization

Q. 메모이제이션이란? 글자 그대로 해석하면 ‘메모리에 넣기’라는 의미. 출처. 위키백과 피보나치 구현 예 def fib(n): if n == 1 or n == 2: return 1 return fib(n-1) + fib(n-2) fib(10) 실행결과는 55이다. 메모이제이션을 활용해서 피보나치 구현 예 memo = {} memo[1] = 1 memo[2] = 1 def fib(n): if n not in memo: memo[n] = fib(n-1) + fib(n-2) return memo[n] fib(10) 똑같이 실행결과는 55이다. 속도차이를 비교해보자. 그냥 구현한 경우 50을 구하는데 얼마나 걸릴까. 끝나지를 않는다. 계속 돌고 있다. 메모이제이션을 활용한 경우 금방 끝난다. 이미 구한 경우는..

Q. 프로그래머스 코딩테스트 Python3 개발 환경은?

A. Python v3.8.5, numpy, pandas 사용 가능 프로그래머스 코딩테스트 Python 개발 환경이 궁금했다. 2022년 4월 2일 현재 Python3의 버전은 3.8.5이다. 외부 라이브러리는 어떤 게 사용가능할까? pandas와 numpy는 사용 가능하다. pandas 버전은 v1.3.4, numpy 버전은 v1.21.4이다. 혹시 conda도 설치되어 있는지 확인해봤다. conda는 설치되어 있지 않다. sympy, scipy도 설치되어 있지 않다.

리트코드leetcode - 104. Maximum Depth of Binary Tree

문제 출처: leetcode - 104. Maximum Depth of Binary Tree 문제 Given the root of a binary tree, return its maximum depth. A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. Input: root = [3,9,20,null,null,15,7] Output: 3 The number of nodes in the tree is in the range [0, 104]. -100 int: if root is None: return 0 queue = collect..

프로그래머스 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버

문제 출처: 프로그래머스 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 타겟 넘버 문제 n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 2..

프로그래머스 코딩테스트 연습 > 탐욕법(Greedy) > 체육복

문제 출처: 프로그래머스 코딩테스트 연습 > 탐욕법(Greedy) > 체육복 문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수..

프로그래머스 코딩테스트 연습 > 완전탐색 > 모의고사

문제 출처: 프로그래머스 코딩테스트 연습 > 완전탐색 > 모의고사 문제 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인..

프로그래머스 코딩테스트 연습 > 정렬 > K번째수

문제 출처: 프로그래머스 코딩테스트 연습 > 정렬 > K번째수 문제 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제..

프로그래머스 코딩테스트 연습 > 힙(Heap) > 더 맵게

출처: 프로그래머스 코딩테스트 연습 > 힙(Heap) > 더 맵게 문제 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록..

프로그래머스 코딩테스트 연습 > 스택/큐 > 기능개발

문제 출처: 프로그래머스 코딩테스트 연습 > 스택/큐 > 기능개발 문제 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도..

전화 면접, 온라인 면접, 커피챗을 위해서 미리 준비해야 할 것

첫 만남 첫만남의 떨림. 이력서 서류가 아닌 실제하는 어떤 존재를 만나서 대화를 나누는 일은 항상 어렵다. 그래서 자신도 모르게 몸이 반응해서 떨리는 목소리, 두근거림 같은 현상이 나타난다. 전화 면접, 온라인 면접, 커피챗 거의 대부분 첫만남에 해당한다. 첫만남. 어떻게 인상을 남길 것인가. 기술 면접은 잘 볼 수도 있지만 잘 못 볼 수도 있다. 인상이라도 좋게 남긴다면 다음 면접의 기회가 생길 수 있다. 자기소개 본인을 소개할 수 있는 짧은 문장을 미리 준비해야 한다. 너무 과장되지 않으면서도, 자신을 잘 드러낼 수 있는 문장. 그렇지 않으면 기억에 아무 것도 남지 않는 소개를 하게 된다. "안녕하세요? OOO입니다"로 끝나게 된다. 지원 동기 / 이직 동기 구체적인 지원 동기를 미리 준비해야 한다...

프로그래머스 코딩테스트 연습 > 해시 > 완주하지 못한 선수

문제 출처: 프로그래머스 코딩테스트 연습 > 해시 > 완주하지 못한 선수 문제 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 part..

지원서나 이력서에 인사담당자가 보고 싶은 정보를 먼저 적기

게임오버 최근에 친구 소개로 지원한 회사에 떨어졌다. "아쉽게도..." 란 문장을 만났다. 역시 쉽게 되는 일이 없다. 불합격 이유 친구가 확인해 준 불합격 이유는 기술 스택이었다. 내가 모자라서가 아니라 기술 스택이 안 맞아서 뽑을 수 없다는 거였다. 해당 기술 스택을 못 채웠으니 내가 모자란 거 같기도 한데... 내가 준비한다고 시간을 끌다가 원래 지원하려던 백엔드 자리가 없어져서, 데이터 백엔드에 지원했으니 불합격이 당연한 결과 같다. 역시 속도가 중요하다! 인사담당자 입장에서 생각해보기 인사담당자나 실무자가 보고 싶은 것은 자신들이 정리해 놓은 자격 요건(기술 스택 포함)을 만족하는가 여부란 생각이 들었다. 일단 자격 요건을 충족해야 그 다음에 어떤 사람인지 궁금할 거 같았다. 아무리 훌륭한 사람..

Q. 노션 페이지에 도메인 연결하고, 구글 애널리틱스 추가하는 방법은?

A. cloudflare와 fruitionsite.com을 활용하면 도메인 연결과 구글 애널리틱스 추가를 무료로 할 수 있습니다. 당연히 도메인이 있어야 합니다. 아래 내용은 https://fruitionsite.com/ 에 나온 영어 튜토리얼을 바탕으로 테스트한 뒤 일부 내용을 추가했습니다. 서브 도메인 연결을 원하신다면 끝까지 읽어 보시고, 전체 도메인에 연결하신다면 영어 튜토리얼을 참고하셔도 됩니다. 해야할 일이 좀 많고 복잡합니다. 천천히 따라해보시기 바랍니다. 그래도 이렇게 하면 GA 통계를 바탕으로 외부 사이트 유입 소스까지 확인할 수 있습니다. 채용 노션 페이지라면 어떤 사이트에서, 예를 들어 어떤 채용 사이트에서 들어왔는지 알 수 있게 됩니다. 결과 예 career.taptorestart...