반응형

전체 글 1418

[Novice Mid : 프로그래밍 연습] 정렬 : 객체 정렬 - 원점으로부터의 거리

★ "왜?" 라는 질문을 스스로에게 하면서 학습하자. 0. 문제 풀이 순서 논리적 순서 확정 관련 카테고리 혹은 문제 끌어오기 필요한 자료연산 리스트업 이에 제일 유리한 자료구조 선택 구현 1. 설명 문제 링크 : https://www.codetree.ai/missions/5/problems/distance-from-origin?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 사진 : 문제 설명 : 원점(0, 0)으로 부터 N개의 점의 갯수만큼 가까운 점부터 순서대로 번호를 출력..

Part 4-2-10. 멀티쓰레드 프로그래밍 : SpinLock

멀티 쓰레드 SpinLock 락 구현 이론을 바탕으로 스핀 락을 실제로 구현해보자. 또한 스핀 락의 개념은 매우 중요해서 면접에서 멀티쓰레드 프로그래밍을 경험했다고 하면 0순위로 물어본다고 하니, 이번 기회에 확실하게 알고 넘어가자. 😎 using System; using System.Threading; using System.Threading.Tasks; namespace CSharp { class SpinLock { // 상태 // true = 사용하는 중(잠금) // false = 사용하지 않는 중(미잠금) volatile bool _locked = false; // 획득 public void Acquire() { while (_locked) { // 기다리는 중... 😩 } _locked = tr..

Part 4-2-9. 멀티쓰레드 프로그래밍 : Lock 구현 이론

멀티 쓰레드 Lock 구현 이론 오늘의 주제는 락 구현 연습이다. 멀티쓰레드 프로그래밍의 락의 비중은 6-70%를 차지할 정도로 매우 중요하다. 따라서 락의 동작방식을 이해하는 것은 매우 중요하다. 물론 언어와 프레임워크에 따라 조금씩 다르겠지만, 근본적인 구조와 동작 방법은 유사할 것이다. 오늘도 비유를 이용하여 Lock 구현 이론에 대해서 알아보자. 이전 시간에서 락의 구현은 화장실을 갔다오는 것과 유사하다고 했다. 예를 들어보자. 우리는 화장실에 갔는데 누군가 화장실 안에서 사용하고 있어 문을 잠군 상태이다. 따라서 우리는 안에 사람이 나오기를 기다리고 있는 상황이라고 가정해보자. 즉. 화장실이 급해서 왔는데 문이 잠겨있는 상태인 것이다. 그렇다면 우리는 이 때 어떻게 행동할까? 1. 무작정 기다리..

[Novice Mid : 프로그래밍 연습] 정렬 : 객체 정렬 - 키, 몸무게를 기준으로 정렬

★ "왜?" 라는 질문을 스스로에게 하면서 학습하자. 0. 문제 풀이 순서 논리적 순서 확정 관련 카테고리 혹은 문제 끌어오기 필요한 자료연산 리스트업 이에 제일 유리한 자료구조 선택 구현 1. 설명 문제 링크 : https://www.codetree.ai/missions/5/problems/sort-by-height-and-weight/description 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 사진 : 문제 설명 : 줄 세우기와 같이 클래스를 정렬을 이용하여 푸는 문제이다. 나는 임의로 클래스를 학생이라고 설정하여 주어서 문제를 풀이..

[Novice Mid : 프로그래밍 연습] 정렬 : 객체 정렬 - 줄세우기

★ "왜?" 라는 질문을 스스로에게 하면서 학습하자. 0. 문제 풀이 순서 논리적 순서 확정 관련 카테고리 혹은 문제 끌어오기 필요한 자료연산 리스트업 이에 제일 유리한 자료구조 선택 구현 1. 설명 문제 링크 : https://www.codetree.ai/missions/5/problems/line-up-students?&utm_source=clipboard&utm_medium=text 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www.codetree.ai 문제 사진 : 문제 설명 : 클래스를 정렬을 이용하여 푸는 문제이다. 학생이라는 클래스를 키, 몸무게, 번호로 생성하..

Part 4-2-8. 멀티쓰레드 프로그래밍 : 데드락

멀티 쓰레드 데드락 데드락의 발생 조건은 이전 시간에 알아본 상호배제 말고도 다양한 상황에서 다양한 조건으로 일어난다. 데드락 발생 조건의 다른 예시를 알아보자. 파란색이 화장실이라고 가정하고, 화장실에는 자물쇠가 2개가 잠겨 있는데, 이 때 직원 A, B가 화장실을 이용하기 위해 서로 경쟁을 한다고 가정해보자. 직원 A는 위의 자물쇠를 획득하고, 직원 B는 아래의 자물쇠를 획득했다. 하지만 자물쇠는 두 개를 동시에 가지고만 있어야만 열 수 있는데, 상황이 이렇게 되니 직원 A는 위 자물쇠를 획득한 상태에서 아래 자물쇠를 직원 B에게 달라고 요청을 하고, 직원 B는 아래 자물쇠를 획득한 상태에서 위 자물쇠를 직원 B에게 달라고 요청을 하는 상태가 된다. 즉 아래 이미지와 같이 되는 것이다. 따라서 이런 ..

Part 4-2-7. 멀티쓰레드 프로그래밍 : Lock 기초

멀티 쓰레드 Lock (OS에서는 크리티컬 섹션(CriticalSection), C++에서는 std::mutex 라고 불린다.) Interlocked 계열 메서드는 성능도 빠르고 좋긴 하지만, 단점이 존재한다. 바로 정수만 사용할 수 있는 것이다. 우리가 나중에 멀티 쓰레드를 이용해 프로그램을 짤 때에는 단순히 number++ 만을 하지는 않을 것이다. 따라서 특정 신호를 주어서 사용자가 정한 블록 안의 내용은 하나의 쓰레드만 실행하도록 제어할 수 있는 도구가 필요할 것이다. 먼저 소스코드 내 가상의 선을 긋는다고 생각하자. 이 영역은 아무도 접근할 수 없으며, 내가 먼저 점유할 경우 다른 쓰레드는 얼씬도 하지 못한다. 라고 생각하자. class Program { static int number = 0;..

Part 4-2-6. 멀티쓰레드 프로그래밍 : interlocked

멀티 쓰레드 지난 시간까지 하드웨어 최적화로 인한 문제를 살펴보았다. 그러나 사실 이는 생각보다 크게 신경쓰지 않아도 된다. 왜냐하면 락, 아토믹 같은 것들을 사용하는 솔루션이 있기 때문이다. 오늘은 공유 변수 접근에 대한 문제점에 대해서 또 다른 실험을 할 예정이다. 😀 소스코드는 아래와 같다. using System; using System.Threading; namespace ServerCore { class Program { static int number = 0; static void Thread_1() { for (int i = 0; i < 10000; i++) number++; } static void Thread_2() { for (int i = 0; i < 10000; i++) numbe..

Part 4-2-5. 멀티쓰레드 프로그래밍 : 메모리 배리어

멀티 쓰레드 이전 시간에서는 컴파일러가 소스 코드를 최적화하여 우리가 원하던 방향으로 정상적으로 작동하지 않는 문제가 발생하였다. 그러나 사실 컴파일러 뿐만 아니라 소스 코드를 최적화 하는 또 다른 존재가 있었으니 바로 하드웨어(HW)이다. 따라서 오늘 실습할 것은 하드웨어가 진행하는 최적화 메모리 배리어에 대해서 학습해보겠다. 🤠 코드는 아래와 같다. class Program { static int x = 0; static int y = 0; static int r1 = 0; static int r2 = 0; static void Thread_1() { y = 1; // Store y r1 = x; // Load x } static void Thread_2() { x = 1; // Store x r2 ..

[코드트리 챌린지] 9월 1주차 인증용 포스트 🤠

실력 진단 점수가 506점에서 446점으로 떨어져버렸다. 😭.. 저번에는 2차원 배열 문제를 잘 풀고 지나갔는데 이번에는 정상적으로 풀지 못했다. 매번 진단테스트를 가만 보면 2차원 배열 문제에서 당락이 나뉘는 것 같다. 이미 Novice Low (프로그래밍 기초)영역의 2차원 배열 영역은 모두 학습했는데.. 왜 어떤 때에는 풀고, 어떤 때에는 못푸는지 내 자신이 한심하다.. 아무래도 학습이 온전하게 덜 된 것 같다. 이모티콘으로는 울었지만, 사실은 울 시간이 없다. 울 시간에 다시 한번 학습해야지.. 🤦‍♂️ 문제 풀이 1. 설명 문제 링크 : https://www.codetree.ai/missions/5/problems/personal-info?&utm_source=clipboard&utm_mediu..

코드트리 블로그 챌린지 시즌 1 시작합니다! 😎

코딩테스트 준비를 C++ 언어를 이용해 코드트리 사이트를 이용하면서 공부를 진행해왔었는데, 이번에 코드트리에서 블로그 챌린지를 통해 학습 경험을 기록하고 레벨업할 수 있는 기회가 생겼습니다. 코드트리 초기에는 문제 질문과 공유 관련 것들이 다 저작권에 걸려서 블로그에 포스팅하면서 학습하고 싶어도 할 수 없었는데 이번 기회에 참여하여 블로그에 공부한것도 정리도 하고, 운이 좋으면 누적 7주 이상 진행하여서 1등 되어서 상품도 받아가고 싶네요. 😁 코드 트리 사이트는 아래와 같습니다. https://www.codetree.ai/ 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요. www..

신입 버릇 팀장까지 간다! 일잘러의 7가지 습관

[쌩신입 완벽 적응 가이드] 일잘러 될 신입사원은 떡잎부터 다르다 ‘세 살 버릇 여든까지 간다’ 한국인이라면 귀에 못이 박히도록 들은 속담이 아닐까요? 한번 들인 버릇은 여간해서 고치기 힘들다는 뜻을 담고 있지요. 한번 굳어진 행동 방식은 나를 어떤 식으로든 변화시켜요. 좋은 습관 하나가 내 인생에 큰 영향을 미치기도 하고, 나쁜 습관 하나가 한 사람의 건강을 해치기도 합니다. 그렇기 때문에 처음부터 좋은 습관을 만드는 것은 백 번 강조해도 지나치지 않아요. 직장생활도 삶과 마찬가지예요. 신입사원 시기는 모든 상황이 낯설고, 그래서 뭐든 새로 익혀야 하죠. 이때 처음 익힌 습관이 장기적인 커리어에 영향을 줄 수 있죠. 업무 습관도 생활 습관과 다르지 않아서, 연차가 쌓여 비슷한 일을 대할 때 그 습관이 ..

공부/자기계발 2023.09.06

채용담당자 "이력서 이렇게 쓰면 광탈"

기본만 제대로 지키면 3초컷은 면한다. 입사 서류를 지원한 후 서류전형을 통과했다는 말은 회사에서 원하는 기본 자격 요건을 통과했거나, 만나 보고 싶은 요소가 있었다는 뜻이라 한 발 유리한 고지에 올라선 것과 같아요. 또 면접을 직접 보러 가면 입지, 사무실, 면접관의 행동과 질문을 통해서 어떤 회사인지 분위기를 파악할 기회도 되고요. 반면 서류전형에 통과조차 못할 때는 뜬구름을 잡는 기분을 느끼게 돼요. 실력은 문제 없었는데 유독 경쟁률이 높아서 평소면 붙었을 텐데 떨어진 건지, 연차가 맞지 않는 게 문제였는지, 기준 미달이었던 건지 전혀 알 수가 없으니까요. 서류전형은 회사 시스템에 따라 검토방식이 다양해요. 1차로 채용 담당자가 선검토 후, 걸러진 서류를 실무진이 2차로 더 보는 곳도 있고, 전부 ..

회사/인사 2023.09.06

Part 4-2-4. 멀티쓰레드 프로그래밍 : 캐시 이론

멀티 쓰레드 캐시 지난번과 동일하게 패밀리 레스토랑을 예로 들어 이해해보자 👍 지난시간 우리는 패밀리 레스토랑인 아웃백을 개업하고 직원(로봇)을 채용해 영혼을 통해 로봇을 움직였다. 그러나 레스토랑이 궤도에 올라서 손님도 많아지고 돈도 많아졌는데 손님이 몰리다보니 일처리를 어떻게 해야할지 고민이 생긴것이다. 오른쪽을 보면 주문 현황을 볼 수 있다. 테이블을 돌아다니며 주문을 받는 직원이 있는데 주문을 받으면 주방으로 전달을 해야 주문이 들어간다. 이 식당에는 주문 현황 기계가 있는데 이 기계에 주문을 기입하면 주방에서 주문서가 나와 음식 조리가 시작된다. 그런데 하나의 문제가 있다. 주문 현황판이 멀리 있다는 것이다. 그렇다면 직원은 이를 어떻게 해결하는 것이 가장 좋을까? 다양한 해결 방법이 있다. 1..

Part 4-2-3. 멀티쓰레드 프로그래밍 : 컴파일러 최적화

멀티 쓰레드 컴파일러 최적화 using System; using System.Threading; namespace ServerCore { class Program { static bool _stop = false; static void ThreadMain() { Console.WriteLine("쓰레드 시작!"); while (_stop == false) { // 누군가 stop 신호를 해주기를 기다린다! } Console.WriteLine("쓰레드 종료!"); } static void Main(string[] args) { // 메인에서 쓰레드를 생성하고 실행한다 Task t = new Task(ThreadMain); t.Start(); // 멈춘다 _stop = true; Console.WriteLi..

반응형