좌충우돌 개발공부

TIL(20240626) [h2와MySQL의 차이, 기술면접준비, 코딩테스트: 시저암호]


📌 기술면접

기술면접 시 3가지

  • 기술적 역량
  • 문화 적합성
  • 성장 가능성

면접공고 분석

  • 면접공고는 내가 일할 팀이 힌트를 주는 곳
  • 핵심 키워드 파악: 공고에 반복적으로 언급되는 키워드
  • 직무 요구사항 이해: 공고에서 요구하는 기술과 경험을 명확히 파악

회사 홈페이지와 인재상 확인

  • 인재상: 회사가 중요시하는 인재의 특성과 자질을 확인
  • 회사문화: 회사의 비전, 미션, 핵심가치 파악
  • 최근 소식과 뉴스: 회사의 최근 활동과 프로젝트를 통해 현재 필요로 하는 역량을 이해합니다.

질문의 맥락 이해

  • 질문의 맥락을 이해하고, 앞뒤 문맥을 고려하여 면접관의 의도를 파악합니다.
  • 이전 질문과 연관성: 질문이 이전 질문과 어떻게 연결되는지 생각합니다.
  • 직접 질문: 의도가 불분명할 때는 직접적인 질문으로 의도를 명확히 합니다.
  • 피드백 활용: 답변 후 피드백을 받아 의도를 재확인하고 보완합니다.

기본적인 질문

  1. 왜 우리 회사에 지원하였는가? (이유 1개이상)
    • 우리회사를 찾아보앗는지? 일에 대한 애정,관심이 있는지?
  2. 다른 회사는 어디에 지원하였는가?
    • 어떤 분야에 관심이 있는지? 일관성이 있는지? 진정성?
  3. 일 못하는 동료가 있다면 어떻게 할건가?
    • 조직에서 일하는 법을 아는지? 본인 역량 안에서 도울 수 있는 방법을 아는가? (회사 내규에 그러한 부분이 있는지 찾아보겠다.)
  4. 워라밸은 어떻게 생각하는가?
    • 회사에 도움이 되고 그 도움이 결국 저의 성취감이 되어 삶의 행복감을 느낄 수 있다면 그게 저의 워라밸이라 생각합니다.

📌 데이터베이스 : H2 vs MySQL의 차이

  • 사용목적과 환경에 따라 MySQL 또는 H2를 선택할 수 있는데, MySQL 경우에는 대규모 프로덕션 데이터베이스가 필요한 경우에 적합하고 H2 database는 경량이며 내장형 데이터베이스로써 러닝커브가 낮을 수 있지만 H2는 초보자나 테스트환경에서 사용하기 적합하다고 할 수 있다.

**러닝커브: 특정 기술 또는 지식을 실제 필요한 업무와 같은 환경에서 효율적으로 사용하기 위해 드는 학습 비용 (쉽게말해 “시간대비 빠르게 배울 수 있다”라고 이해했다.)

Jpa심화강의를 들으니, 이론공부를 게을리 하지 않았나 라는 생각이 너무 많이 든다. 생각나지 않을 때마다 찾아보는 형식으로 하니 내것으로 되지 않고 그때마다 단기기억형식으로만 익히게 되서 장기기억이 될 수 있도록 이제는 얕게 공부하기 보다는 깊게 공부하는 방법으로 가야할 것 같다.

📌 @Configulation vs @Component의 차이

  • @Component : 개발자가 직접 작성한 클래스를 Bean으로 등록할 때 사용, 3 layer 어노테이션에 상속
  • @Configulation : 외부라이브러리 또는 내장클래스 Bean으로 등록하고자 할 경우 사용(개발자가 직접 제어 불가능)

📌 코딩테스트1️⃣ : 시저 암호

🔒 문제 : 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 “AB”는 1만큼 밀면 “BC”가 되고, 3만큼 밀면 “DE”가 됩니다. “z”는 1만큼 밀면 “a”가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

🔓 문제풀이


class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        char[] arr = new char[s.length()];
        
        for(int i=0; i<s.length(); i++) {
            char ch = s.charAt(i); // ch(0) = A, ch(1) = B 
            if (ch>=65 && ch<=90) { // A 65 B 66
                ch += n; // 66 67 -> BC
                if(ch>90) {
                    ch-=26;
                }
            } else if (ch>=97 && ch<=122) {
                ch += n;
                if(ch>122) {
                    ch-=26;
                }
            }
            arr[i] = ch; // arr[0] = B,  arr[1] = C
        } answer = String.valueOf(arr); // BC
        return answer;
    }
}