목록전체 글 (323)
삶 가운데 남긴 기록 AACII.TISTORY.COM
원본 테이블 구조(스키마)와 같은 새 테이블 생성 CREATE TABLE IF NOT EXISTS 타겟DB.복사테이블 LIKE 원본DB.원본테이블; 원본 테이블에 Primary Key 또는 auto_increment가 설정되어 있으면 복사할 수 없습니다. 원본 테이블 구조(스키마)와 같은 새 테이블을 생성 후 데이터도 함께 복사 CREATE TABLE IF NOT EXISTS 타겟DB.복사테이블 SELECT * FROM 원본DB.원본테이블; 원본 테이블에 Primary Key 또는 auto_increment가 설정되어 있으면 복사할 수 없습니다. 테이블을 생성했던 CREATE 쿼리 보기 SHOW CREATE TABLE 원본DB.테이블이름; Primary Key나 auto_increment 등 제약사항도 ..
stack 스택은 Last In First Out 자료구조입니다. 제일 마지막에 push()한 객체가 제일 처음에 pop() 됩니다. import java.util.Stack; class Coin{ private int value; public Coin(int value) { this.value = value; } public int getValue() { return value; } } public class StackEx { public static void main(String[] args) { Stack coinBox = new Stack(); coinBox.push(new Coin(100)); coinBox.push(new Coin(500)); coinBox.push(new Coin(10)); ..
보관 보관은 수탈당했을 때 아이템을 빼앗길 확률을 줄여주고 상인들의 필수 상납품(개껌)을 제작할 수 있습니다. 다만 랭크를 올리기엔 약간 까다로운 편입니다. 연성까지해서 순수15랭을 맞추는 것을 추천합니다. 연성효과는 생산시 재료 절약입니다. 부스터 준비 16세기 1,2,3기 암스테르담 도구점 : 강욕상인의 철쇄(보관+5) 다랑어 레벨이 안될 때 사용하면 빠르게 랭작할 수 있습니다. 레시피: 여행자의 식량 조달술(살로니카, 뱅가지 20만 투자), 축산 비법서 새의장(라구사, 칼비 도구점) 편하게 랭크를 올리기 위해서는 조리를 배우셔야 합니다. 2랭크: 달걀 -> 오리, 닭 (여행자의 식량 조달술, 보관) -> 달걀(축산 비법서 새의장)->오리,닭->달걀->무한반복 5랭크: 양파(베이루트, 카이로), 화이..
이진 트리(binary tree) 구조 검색을 위해서는 우선 정렬이 되어 있어야 하는데, 이때 정렬을 위해 이진트리구조를 이용합니다. 이진 트리 구조에 대한 자세한 내용은 생략하도록 하겠습니다. TreeSet 이진트리 기반 Set 컬렉션입니다. value와 왼쪽노드, 오른쪽노드로 구성됩니다. import java.util.NavigableSet; import java.util.TreeSet; public class TreeSetEx { public static void main(String[] args) { TreeSet scores = new TreeSet(); scores.add(new Integer(97)); scores.add(new Integer(78)); scores.add(new Intege..
Map key와 value로 구성된 객체를 저장하는 구조입니다. 여기서 key와 value는 모두 객체입니다. key는 중복될 수 없지만 값은 중복될 수 있습니다. 여기서 key는 중복을 허용하지 않으므로 set과 동일한 구조를 가진 객체입니다. 그래서 key는 keySet 형태로 저정되어 keySet() 메서드를 통해 얻을 수 있습니다. 만약 동일한 key로 value값을 저장하면 나중에 저장한 값으로 기존값이 대체되는 겁니다. HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있습니다. HashMap import java.util.HashMap; import java.util.Iterator; import java.util.Map; import j..
Set 순서를 유지하지 않고, 중복을 허용하지 않는 컬렉션 입니다. 수학에서의 집합과 유사한 개념입니다. 순서나 인덱스가 없기 때문에 Iterator 를 이용해서 값에 접근해야 합니다. HashSet Set 인터페이스를 구현한 클래스 입니다. HashSet은 객체를 저장하기 전에 객체의 해시코드를 얻어내고 이미 저장되어 있는 객체들의 해시코드와 비교해서 중복된 값이 있는지 검사합니다. public class HashSetEx { public static void main(String[] args) { Set set = new HashSet(); set.add("Java"); set.add("JDBC"); set.add("Servlet"); set.add("Java");//중복해서 저장되지 않음 set.a..
List 컬렉션 순서를 유지하며 객체를 저장하며 중복해서 저장할 수 있습니다. ArrayList 인덱스 정보가 있는 List 컬렉션입니다. 인덱스가 있으므로 삽입과 삭제가 빈번한 구조에서는 바람직하지 않습니다. 이런 경우 LinkedList를 사용하는 것이 좋습니다. java 1.5부터 제네렉을 통해 객체의 타입을 지정해줘서 불필요한 casting을 하지 않아도 됩니다. import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ArrayListEx { public static void main(String[] args) { List list = new ArrayList(); list.add("1st");..
조건 부관 사관: 레벨 총합 50 이상 왕립 함대: 레벨 50/50/50 이상 + 특성치 100S + 신뢰도 100 보상 부관의 모국과의 친밀도 상승 부관의 항해 기록 획득 월별 보상 획득 (왕립 함대): 부관 스킬 비법서(승계) 획득 친밀도 대국망명: 친밀도 신뢰(50이상) 필요 오스만망명: 친밀도 친애(80이상) 필요 부관 레벨업 모험: 항해장에 배치하고 해난사, 항해,, 채집 상인: 육메,남만 드랍 군렙: 태부(해역토벌)
Lambda Expressions 함수형 프로그래밍은 병렬처리와 이벤트 처리에 효율적이어서, 객체지향 언어인 자바에서도 함수형 프로그래밍의 장점을 도입하기 위해 람다식이 자바 8부터 도입되었습니다. 람다식은 익명함수를 생성하기 위한 식입니다. 기본 문법 (타입, 매개변수) -> {실행문; } (int a)->{System.out.println(a);} 매개변수의 타입은 자동 인식 될 수 있기 때문에 생략 가능합니다. (a)->{System.out.println(a);} 매개변수가 한개만 있다면 소괄호도 생략 가능합니다. 실행문도 한개만 있다면 중괄호도 생략 가능합니다. a->System.out.println(a) 만약 매개변수가 없다면 소괄호를 반드시 표기 해야 합니다. ()->System.out.pri..
CentOS 7 에서 5.7을 설치하고 설정하는 과정을 다뤄봅니다. 아래 과정은 root 계정으로 실행하셔야 합니다. su - wget 설치 yum install wget MySQL 다운로드 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 그러면 현재 실행 경로에 rpm 파일이 다운로드 됩니다. MySQL 설치 rpm -ivh mysql57-community-release-el7-11.noarch.rpm MySQL 서버 설치 설치하다가 public key for mysql-community-server-5.7.37-1.el7.x86_64.rpm is not installed 메시지가 나오면서 설치가 되지 않는 경우도 있..
샌프란시스코 입항 퀘스트 새로운 땅을 찾아서 대항해시대 온라인에서 샌프란시스코는 퀘스트를 통해서 발견해야만 입항 할 수 있습니다. 선행 조건 북미 서해안 입항허가: 동아시아 입항허가(칙명)까지 완료 후 암스테르담 메르카토르 보고시 극북대서양이 나오는데 한번더 해역조사를 누르면 입항 허가가 나옵니다. 북해 해역조사 완료: 암스테르담 메르카토르와 대화 후 북해의 해역조사를 완료해야 합니다. 해역조사는 M키를 눌러 맵을 연뒤 해당 해역을 선택 후 조사 버튼을 누른 뒤 필요한 행동(인식, 채집 등)을 하면 완료됩니다. 필요 언어: 프랑스어, 북미어 모험 퀘스트 의뢰장소 : 마르세이유 모험가 조합 목적지: 샌프란시스코 크로노 퀘스트 : 19세기 1회만 완료 가능 공략 1. 마르세이유 주점에서 저스틴과 대화 2. ..
제네릭 타입은 JDK5부터 지원됩니다. 제네릭은 잘못 사용된 데이터 타입 때문에 발생하던 문제를 컴파일 과정에서 제거하고 불필요한 casting을 하지 않도록 해줍니다. 제네릭 타입 public class BoxExample { public static void main(String[] args) { Box box1 = new Box(); box1.set("BOX"); String str = box1.get(); System.out.println(str); Box box2 = new Box(); box2.set(4); int value = box2.get(); System.out.println(value); } } class Box{ private T t; public T get() {return t;}..
스레드 풀 스레드 풀은 작업 스레드를 제한된 개수(총 개수)만큼 정해놓고 작업 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리합니다. 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리 합니다. 스레드 풀(작업 큐)로 병렬 처리를 한다면 갑자기 스레드가 폭증하는 상황에서도 성능 저하를 최소화 할 수 있습니다. 스레드 풀은 java.util.concurrent 패키지의 ExecutorService 인터페이스와 Executors 클래스를 제공하고 있습니다. 스레드 풀 생성 Executors 클래스의 newCachedThreadPool()이나 newFixedThreadPool(int n Threads) 으로 생성 할 수 있습니다. 스레드 풀 종료 스레드 풀은 데몬 스레드가 아니기 때문에..
리눅스 개발서버에서 MySQL 5.X 사용중에 디스크 용량 부족 메시지가 나오길래 우선 디스크 용량을 조사해 보았습니다. df -h 과연 루트 파티션의 용량이 꽉차 있었습니다. 그래서... 원인을 찾기 위해 좀더 조사해보았습니다. du -h 여러분의 실제 경로는 다를 수 있습니다만 /var/lib/mysql/ibtmp1 용량을 잡아먹던 범인은 바로 이 ibtmp1 파일이었습니다. 무한정 커지고 있더군요. 문제 해결은 단순히 MySQL를 재시작하는 것이었습니다. 리눅스 콘솔에서 아래와 같이 재시작 합니다. systemctl restart mysqld MySQL Temporary Tablespace 사용자가 생성한 임시 테이블들이 shared temporary tablespace 에 생성됩니다. 아무것도 설..
자바 어플리케이션은 main()스레드 외에 병렬로 처리하는 스레드를 같이 실행할 수 있습니다. 보통은 멀티 스레드로 병렬로 작업하는 것이 효율적이지만, 너무 많은 스레드를 실행하면 각 스레드간 context switching 에 시간을 더 소비하게 되어 오히려 효율이 떨어지게 됩니다. java.lang.Thread 클래스로부터 extends 하거나 Runnable 인터페이스로부터 implements 해서 스레드를 생성할 수 있습니다. Runnable 구현 방법 import java.awt.Toolkit; public class BeepTask implements Runnable { @Override public void run() { Toolkit toolkit = Toolkit.getDefaultToo..