public static void main(String... args) {
List<Integer> inputs = new ArrayList<Integer>(Arrays.asList(10, 30, 10, 20, 20, 10));
int max = 100;
for (Integer input : inputs) {
max -= input;
}
if (max != 0) {
System.out.println("invalid params");
return;
}
inputs.add(0, 0);
int rand = new Random().nextInt(100) + 1;
int result = 0;
int start = 0;
int end = 0;
for (int i = 0; i < inputs.size() - 1; i++) {
start += inputs.get(i);
end += inputs.get(i + 1);
if (rand >= start && rand <= end) {
result = i;
break;
}
}
System.out.println(rand + "::dd::" + result);
}


'java' 카테고리의 다른 글

from idx to idx 설정  (0) 2020.04.07
URL의 이미지 파일 분할저장  (0) 2019.10.10
Intellij Custom VM Option 넣기  (0) 2017.06.16
JUnit Test property 주입 하기  (0) 2017.04.26
Java goole.common.cache.Cache 사용하기.  (0) 2016.01.20
Intellij Custom VM Option 넣기 

Help > Edit Custom VMOptions


-server
-Xss512k
-Xms1024m
-Xmx4096m
-XX:MetaspaceSize=350m
-XX:MaxMetaspaceSize=2G
-XX:ReservedCodeCacheSize=512m
-XX:SurvivorRatio=128
-XX:+UseG1GC
-XX:+AggressiveOpts
-XX:-UseParNewGC
-XX:-UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+CMSClassUnloadingEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+CMSPermGenSweepingEnabled
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:CMSInitiatingOccupancyFraction=70
-XX:MaxTenuringThreshold=0
-XX:+TieredCompilation
-XX:TieredStopAtLevel=1
-Djava.net.preferIPv4Stack=true


property.xml
<property.name>propertyresult</property.name>
<CODE>
Properties mockProperties = mock(Properties.class);
when((mockProperties.getProperty("property.name"))).thenReturn("propertyresult");


'java' 카테고리의 다른 글

확률을 퍼센트로 줘서 랜덤하게 뽑기  (1) 2018.01.18
Intellij Custom VM Option 넣기  (0) 2017.06.16
Java goole.common.cache.Cache 사용하기.  (0) 2016.01.20
Java 가 어려운 이유.  (0) 2015.10.01
Visual VM 메모. 모니터링  (0) 2015.09.24

객체지향적 사고와 설계를 해야하는 이유는 사용자(관리자)의 서술적인 니즈를 비즈니스에 맞는 모델링을 하기위한 최적의 방법이기 때문이다.


  1. 객체지향 사물의 분류
    1. 사물(Things)은 곧 객체이다.
    2. 사물에는 형태를 가진 것과 개념만 존재하는 것으로 분류할 수 있다.
    3. 소프트웨어 분석 설계 구현을 한다는 것은 실세계의 사물을 가상세계의 사물로 전환 하는 것이다.
    4. 객체 모델링, 데이터 모델링도 다 사물들을 관리하는 기준에 맞춰 분류하는 것이다.
    5. 타입, 클래스는 객체 즉 사물을 분류했을 때 정의하는 것에 지나지 않는다.
  2. 사물을 어떻게 분류할 것인가?
    1. 책을 예시로 보면 책은 객체이다. 책에 대한 정보만 관리하는 것은 개념 객체이고 책의 실물을 관리하는 사물을 관리하는 객체가 구별되어 관리되어야 한다. 
    2. 책이라는 객체가 책 정보에 대한 분류 기준으로 도서문헌상의 분류 규칙을 따르므로 다양한 분류체계를 관리하는 객체도 발생할 수 있다.
    3. 사물은 단순이 존재한다고 하나의 객체만은 아니다.
    4. 보는 관점, 각 비즈니스 도메인별로 차이가 발생하므로 사물의 분류 기준을 비즈니스 에 맞춰 모델링이 되어야 한다.

출처(http://www.slideshare.net/dahlmoon/20160131)

private Cache<String, Dto> cached = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(
EXPIRE_IN_MINUTE, TimeUnit.MINUTES).build();

private Dto getDtoByCache(final String id) {
return cached.get(id, new Callable<Dto>() {
@Override public Dto call() throws Exception {
return target.getDtoById(id);
}
});
}


'java' 카테고리의 다른 글

Intellij Custom VM Option 넣기  (0) 2017.06.16
JUnit Test property 주입 하기  (0) 2017.04.26
Java 가 어려운 이유.  (0) 2015.10.01
Visual VM 메모. 모니터링  (0) 2015.09.24
객체지향 프로그래밍이란?  (0) 2015.07.04

1. OOP

Class를 통한 설계만이 가능하여 OOP가 강제된다.

기존 설계에 대한 지식이 없는 사람은 코딩에 난항을 겪는다.

2. 기본 API

MSDN, 파이썬과 비교하면 기본 API가 (많이) 부실하다. 

3. Primitive Type

컴파일러의 고도화가 이루어지지 않았다. 성능 때문에 타협한 원시타입이 API를 너무 복잡하게 만든다. 

int , Integer, long, Long 등 ..

4. import API진입 장벽

여러곳에서 주입하여 사용하는 API의 기술이 후지다. 적용하는데 많은 노력이 필요하다. 

5. 프레임워크

다각도에서 만들어진 프레임워크들은 자바를 자바가 아닌 방식으로 사용하게 만든다.

설계나 아키텍쳐를 획일화 하거나, 간접적이거나, 사용하는 진입장벽을 만든다. 

6. 버전 마다 다른 개발방식 요구

java 6과 7의 프로그래밍 방식은 완전히 다르다. 8또한 완전히 또 다르다.

VisualVM 은 자바 어플리케이션의 상태를 보여주는 내장 기본 기능이다.

visual 이라는 말에서도 볼수 있듯 자바 명령어로도 노출 되는 모든 정보는 조회 가능하다.

MBean 관련 라이브러리의 커맨드를 사용하면 된다.

ex) http://stackoverflow.com/questions/26130824/getting-java-visualvm-data-from-the-command-line

ObjectName jvmMemory = new ObjectName("java.lang", "type", "Memory");           
CompositeData heapUsage = (CompositeData) mbsc.getAttribute(jvmMemory, "HeapMemoryUsage");
printer.print(String.valueOf(heapUsage.get("used")));
printer.print(String.valueOf(heapUsage.get("committed")));
printer.print(String.valueOf(heapUsage.get("max")));

https://visualvm.java.net/ko_KR/gettingstarted.html


객체지향 프로그래밍이란

상속관계로 클래스 계층구조를 형성하고,

클래스에 대한 인스턴스(필드)는 객체로 표현하며,

객체가 모여 서로 협조(사용)하며

조직을 이루게하는 구현방식이다.

Collections.sort(list, new Comparator<SomeDto>() {
@Override
public int compare(SomdDto o1, SomeDto o2) {
return o1.getCreatedAt().compareTo(o2.getCreatedAt());
}
});

객체안 값을 비교하여 sort Collections sort

private static final char UTF_8_WITHOUT_BOM = '\ufeff';

private String saveUpdatedResult(String mailString) {
String fileName = DateUtils.
convertDateToString(new Date(), DateUtils.FORMAT_DATE_CALENDAR) + ".csv";
Path filePath = Paths.get(fileName);
try {
Files.
createFile(filePath);
try (BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(Files.newOutputStream(filePath, StandardOpenOption.TRUNCATE_EXISTING), "UTF-8"))) {
writer.write(
UTF_8_WITHOUT_BOM);
writer.write(convertHtmlToCSV(mailString));
}
return store(new File(fileName), fileName);
} catch (Exception e) {
log.warn("File create error. cause : ", e);
return null;
} finally {
try {
Files.
delete(filePath);
} catch (IOException e) {
log.warn("File delete fail. cause : ", e);
}
}
}

파일의 맨 앞에 \ufeff 을 넣어주면 된다. 하이고~..

+ Recent posts