본문 바로가기
반응형

Language/Java42

코딩 테스트 - 프래그래머스 코딩 테스트를 풀어보자:) https://programmers.co.kr/ 문자열 출력하기 난이도 0레벨 ㅋㅋ 아래처럼 소스를 짜고! 코드를 실행! 와우! 점수를 준다 ㅋㅋㅋ 굿~최대 점수가 3점인가?? 14점도 있었다..ㅎㅎ 다른 사람의 풀이도 볼수 가 있다! ㅋㅋ 역시 코딩에 정답이 없어! 여러가지 답이 나올수 있다! 대학교때 생각이 물씬 난다 ㅎㅎ 다른소스를 보니 a.length()가 중복이라 변수로 처리했다. 굿! 앞으로 종종 풀어보자:) 2023. 7. 18.
Producer-Consumer 패턴 더보기 Runnable과 Callable의 차이점은? acet.pe.kr/819 > 상황 성능이 좋지 않은 부분이 발생하여 그 부분을 해소하기 위해 멀티 쓰레드로 처리하려고 했다. 그런데 멀티 쓰레드 처리 후 나오는 리스트형 데이터가 재사용 되어지는 문제가 발생. > 결론 생산자-소비자 패턴을 사용하기로 함. 생상자 - 멀티쓰레드 처리 및 리스트형 데이터를 블라킹 큐에 넣어줌. 넣기만 함! 소비자 - BlockingQueue에 넣어진 것들을 사용함. 사용만 함! > 간단한 프로젝트 만들어서 테스트 함. @SpringBootTest class DemoApplicationTests { @Test void producerAndConsumerMethodTest() { BlockingQueue q = new Li.. 2021. 3. 18.
Runnable과 Callable의 차이는? Runnable과 Callable의 차이는? - Runnable : 객체와 Exception을 발생 시키지 않음. - Callable : 특정 타입의 객체와 Exception을 발생 시킴. ㅇㅋ! 2021. 3. 18.
AtomicInteger&LongAdder&Thread-Safe 자바에서 Thread-Safe 즉, 데이터에 대해 동시 접근을 제어하기 위해 Lock( 2020/11/24 - [Language/Java] - Java thread에서의 Lock의 종류?) 을 사용한다. 그런데 이 데이터가 그냥 값을 읽거나 업데이트 정도의 기능일 경우에는 Lock보다는 원자성(Atomic) 변수가 더 성능도 좋고 효율적이다. 아래는 Thread-Safe 이야기 하다가 나옴 ㅋㅋ 오늘 포스팅은 AtomicInteger와 LongAdder에 대해 알아보고자 한다. LongAdder의 경우 실제 서비스에서 사용하고 있다. 위의 사진에서 보면 여러가지 정보가 있는데 하나씩 살펴보면..! int a = 0; thread-1 thread-2 a+=1 a+=1 의 경우 CPU에 의해 처리가 되는데 .. 2020. 12. 1.
Java thread에서의 Lock의 종류? 자바에서 2개의 Lock이 있는데 첫번째는 자바에서 thread간 동기화를 위해 synchronized 키워드를 사용하는것을 사용 합니다. 이런 synchronized 키워드를 사용하는 lock을 Intrinsic Lock 또는 Built-in Lock이라고 한다. // Mutual Exclusion public synchroized void intrinsicLockfunc(){ ... } // Wait synchronized(this){ ... this.wait(); ... } // signal synchronized(this){ ... this.notify(); ... } 두번째는 Java 1.5에서 java.util.concurrent.locks 패키지를 통해 제공되는 Explicit Lock이 있.. 2020. 11. 24.
Error parsing HTTP request header 에러 갑자기 헤더 오류가 나서 뭔가 싶었는데 알고 봤더니 앞단과 뒷단간에 통신할 때 Request가 Bad였던것!그래서 아래와 같이 오류가 떨어짐. 수정사항으로는 앞단(클라이언트, 프론트) encodeURL로 뒷단(서버)에서는 decoode를 수행.특이사항으로는 로컬에서는 잘되어짐. 서버단에서 버그 발생.톰캣 버전에 따라서 달라진다는것을 알수 있었음. -_-;;톰캣!!~~ - 끝 - 2018. 4. 5.
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory problemjava -version-bash: /acet/program/jdk/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory solution$ yum -y install glibc.i686Loaded plugins: fastestmirror, securityYou need to be root to perform this command.[deploy@lineup-data-krane program]$ sudo yum -y install glibc.i686Loaded plugins: fastestmirror, securitySetting up Install ProcessLoading mirror speeds from .. 2016. 10. 27.
자바 예외처리를 생각해보자. 예외의 종류는 2가지로 보면 된다.checked exception과 unchecked exception말그대로 체크가 되는 예외와 예기치 못하게 발생하는 예외를 뜻한다. 또한 unchecked exception은 runtime exception 이라고 많이 불리운다.여기서 생각해보아야 할 것이 있다. 어떤 처리를 해주어야 예외처리를 잘하는 걸까?보통은 Exception가 발생하면 잡아서 에러로그를 찍어주거나 상위로 올려주어서 처리를 하기도 한다.try { ... 블라블라 ...} catch(Excetpion e) { logger.error(e.getMessage);}토비책에서도 제대로된 예외처리를 하라고 살짝 나오기도 한다. 과연..어떤 예외처리가 제대로된 예외처리일까? 사람마다 다를수 있을것 같기도 하.. 2016. 9. 26.
Integer.valueOf / Integer.parseInt 왜 자꾸 오류가 나나..싶었는데... Integer.valueOf(queryTimeStr); // queryTimeStr은 스트링형태가 확실했다... 원인은..int 범위를 넘어서였다..-_-;; 삽질 하다니 ㅋㅋㅋㅋ 2016. 5. 19.
input value escape 적용하기! 상황) 아래와 같이 input box의 value의 값에 특수문자가 들어가면 안녕하세요! "ace-t" 입니다가 아닌 안녕하세요! 만 나오게 된다.ㅠㅠ 처리) 처리는 자바단에서 하였고 guava lib를 사용하였다.maven기반!http://www.mvnrepository.com/artifact/com.google.guava/guava/18.0 com.google.guavaguava18.0 guava 사용법 - 아래와 같이 Escape하고자 하는것을 addEscpae로 추가하시면 됩니다. 단, html 특수문자를 처리해줘야 하는 상황 입니다. 즉, "는 쌍따옵표죵! \" 2015. 11. 30.
자바 전체공백 제거하기 1. trim()은 문자열 앞뒤 공백제거. 전체가 아니라서 부족해!~ 하실때는? replaceAll(" ","") 또는 replaceAll("\\p{Space}", "") 로 공백을 제거하면 됩니다. 위처럼 검색을 때리면 "카카오톡" 으로 붙어서 검색하게 되어집니다. 참 쉽죠잉?참고로 가독성이 첫번째것이 더 높을 것 같아서 replaceAll(" ","") 처리하려고 했는데 치환이 안되는 경우도 있는듯 하여두번째 방법을 택하였습니다.참고 사이트 : http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 끝~ 2015. 10. 19.
이펙티브자바) 규칙 68, 69 규칙 68. Prefer executors and tasks to threads# Info 01) JDK 1.5 - add java.util.concurrent참고 사이트 : http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html # info_02) 이 패키지에는 실행자 프레임워크(Executor Framework)라는 것이 있음, 인터페이스 기반 Task 실행 프레임워크. ex_01) ExecutorService executor = Executors.newSingleThreadExcutor(); Runnable을 넘겨 실행 : excutor.excute(runnable); 자연스레 종료 : executor.sh.. 2015. 8. 5.
이펙티브 자바) 규칙 59, 60, 61, 62, 63, 64, 65 규칙 59. Avoid unnecessary use of checked exceptions checked exceptions Exception can recover IOException, IllegalArgumentExceptions uncheked exceptions RuntimeException can not recover transactionNullPointerException 핵심요약 : checked exceptions 은 너무 남발하면 프로그램을 복잡하게 만든다.그러므로 훌륭한 프로그래머가 되기위해서는 생각해보아야 한다. 무엇을?1) 예외적인 상황을 막을수 있는가? 2) 예외 상황에 대한 조치를 취할 수 있는가?막을수 없고, 조치를 취할 수 없다면(can't recover) runtimeExc.. 2015. 7. 30.
규칙41) 오버로딩을할 때는 주의하라! 제네릭 메카니즘 “Erasure" Type Erasure Generics were introduced to the Java language to provide tighter type checks at compile time and to support generic programming. To implement generics, the Java compiler applies type erasure to: Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary cla.. 2015. 7. 21.
(java) ltrim 구현 private final static Pattern LTRIM = Pattern.compile("^\\s+"); tip. \\s+$ private String ltrim(String s) { return LTRIM.matcher(s).replaceAll(""); } ^ : 시작. \s : 공백. + : 하나 이상. 매칭되는것 없애준다. 끝. 2015. 6. 30.
이펙티브자바 규칙 19) 2015년 6월 21일- 일요일 스터디 카페 방문 1. 이펙티브 자바 읽기(범위 : 규칙19,20,21) 인터페이스는 클라이언트 입장에서 보면 “알림이?(명세) 역할"을 한다. 즉, class로 구현할 것을 인터페이스는 미리 말해준다. 인터페이스 사용법 중에 실패한 것은 메소드도 없고 static final field만 존재하는 소위 "constant interface” 라 불린다. // Constant interface antipattern - do not use! public interface PhysicalConstants { // Avogadro's number (1/mol) static final double AVOGADROS_NUMBER = 6.02214199e23; // Boltzmann constant (J/K) static final d.. 2015. 6. 21.
2015년 06월 17일 이펙티브자바 스터디. 스터디 범위 : 이펙티브 자바 규칙17. 참여인원 : 총 5명 - 테리팍, 호이루팍, 빅터신, 지니유, 아론킴상속을 위한 설계와 문서를 갖추거나 그럴수 없다면 상속을 하지말라!?? 재정의 기능 메소드를 내부적으로 어떻게 사용하는지(self-use) 반드시 문서에 남기라는 것. - 더 쉽게 풀어서 말하면 메소드 내부동작 원리에 관한 주석을 남기라는 뜻. 토론) java doc 이야기 테리팍 : java doc을 남기는 것은 좋은 것 같다. 이유 : 이력관리도할 수있고, 더 나아가 CI서버에서도 사용할 수 있다. 또한 개발 전후에 유용할 것 같다. 호이루팍 외 3명 : 이력은 커밋로그나 히스토리를 통해서 보면 되지 않는가? java doc은 관리가 안된다. 빅터신 : 주석(java doc)은 필요한 것만 즉.. 2015. 6. 17.
Favor composition over inheritance 참조 site : http://uet.vnu.edu.vn/~chauttm/e-books/java/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf 여기에서 말하는 상속의 범위 - extends!! interface implements는 아니다. 상속은 코드 재사용에 대해서 파워풀하지만 항상 좋은것만은 아니다. : 상속을 적절히 잘 사용하지 못하면 소프트웨어는 깨지기 쉽다. 잘 사용하려면? 같은 프로그래머가 같은 패키지 안에서 사용하면 안전하다(당연한거 아닌가..-_-;;) 여러사람이 사용하더라도 상속을 고려해 설계되고 그에 맞는 문서를 갖춘 클래스에 사용하는 것은 안전! 메서드 호출과 달리, 계승은 캡슐화 원칙을 위반한다. : 하위 클래스는 상위클래스의 구.. 2015. 6. 16.
String을 날짜 포맷으로 변환하기! String을 날짜 포맷으로 변환하기! regTime : 20150522141253 reqTime : 20150428234211 위와 같은 String형식을.. 2개의 format을 선언 한 뒤 DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 아래처럼 작업을 해주면 됩니다. try { outputMap.put("작업일", sdf.format(formatter.parse(regTime))); outputMap.put("신청일", sdf.format(formatter.parse(reqTime))); } catch (Parse.. 2015. 6. 15.
clone을 재정의할 때는 신중하라! Cloneable : Note that this interface does not contain the clone method Even if the clone method is invoked reflectively, there is no guarantee that it will succeed. 단점 : 기본적인 문제는 clone메소드가 없으며 Object의 clone메소드가 protected로 선언되어 있다는 것이다. 리플렉션(reflection)을 사용하지 않고서는 Cloneable을 구현한 객체라도 clone 메소드를 호출할 방법이 없다. 리플렉션을 사용한 호출도 실패할 가능성이 있다. 해당 객체에 호출 가능한 clone메소드가 구현되어 있으리라는 보장이 없기 때문. 참고내용 접근 제어자 구분 mod.. 2015. 6. 11.
hashCode() HashCode란?객체를 구별하기 위해, 고유한 정수값으로 출력시켜주는 메소드가 바로 hashCode()다.객체 참조 변수를 출력할 때, 출력되는 Reference Address는 바로 이 hashCode를 16진수로 출력한 값이다.ex) HashCodeTest@cb788b90(참고 사이트 : http://mwultong.blogspot.com/2008/02/16-2-10-8-hex-calc.html) 모든 클래스는 java.lang.Object의 하나의 기본이 되는 hash scheme를 상속 받는다.클래스는 implementation을할 때(equals 같은 method overriding을 뜻한다) public int hashCode()를 반드시 override해야한다.여기서 일반적인 규약이 있다... 2015. 6. 7.
반응형