일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 익명 객체 @transactional
- 자바 백준 팩토리얼 개수
- 백준 연결요소 자바
- go
- java 백준 1509
- java 1509
- kotiln functional interface
- ipfs singletone
- spring mongodb switch
- kotiln const val
- rabbitmq 싱글톤
- mongodb lookup
- Spring ipfs
- spring mongodb
- java 파티
- javav 1676
- kotiln const
- 자바 1676
- nodejs rabbitmq
- 백준 특정한 최단 경로
- 백준 1504 java
- spring mongoTemplate
- java 1238
- java 팩토리얼 개수
- spring mongoTemplate switch
- Java Call By Refernce
- 백준 2252 줄세우기
- 전략 패턴이란
- 안정해시
- ipfs bean
- Today
- Total
목록프로그래밍 언어 (20)
공부 흔적남기기
객체를 선언하고 복사하는 과정에서 의도하지 않게 데이터가 변경되어서 오류가 발생할 수 있습니다. kotiln의 복사 방식을 살펴보고 실수하지 않게 잘 기억해둡시다.얕은 복사흔히 우리가 사용하는게 얕은 복사입니다.주로 = 을 이용하며 객체의 주소값을 복사하기 때문에 복사본을 교체하면 원본도 함께 변경되게 됩니다.data class Data( var data: String, val dataset: MutableList = mutableListOf())fun main() { val data = Data("basic Data") val dataShallowCopy = data dataShallowCopy.data = "changed Data" println("basic data ..
Kotlin fun interface와 interface 차이 먼저 fun interfcace를 사용하게된 계기... interface LogCallStrategy { fun call() : T } 다음과 같은 인터페이스가 있고 class LogHelperStrategy( private val logService: LogServiceDirtyCode, private val logCallStrategy: LogCallStrategy, ) { fun execute(message: String): T { var trace: Trace? = null return runCatching { trace = logService.begin(message) logCallStrategy.call() }.onSuccess {..
먼저 Call by Value가 됐든 Refernce가 됐든 여기서 말하는 Call 이란 무엇일까?여기서 Call 의 의미는 메소드를 호출해서 인수를 넣을 때를 말하는 것이다.Call by Value call By Value는 인수가 메소드 블럭으로 넘어갈 때 새로운 변수 (스택에 생성)에 이전 블럭에서 사용하던 변수의 값 자체를 넣어주는 것이다. Call by Referencecall By Reference 는 인수가 메소드 블럭으로 넘어갈 때 새로운 변수 (스택에 생성)에 이전 블럭에서 사용하던 변수의 값 자체가 아닌 참조를 넣어줌으로서 새로운 변수와 이전 블럭에서 선언한 변수가 같은 주소를 가리키게 하는 것이다. C에서 흔히 포인터를 통해 Call By Reference를 사용할 수 있다. Java..

d1과 d2는 0.001로 서로 같아보이지만 사실 자리수때문에 서로 아주 미세하게 다른값을 가지게된다. 근데 clion ide가 무조건 true라는 웃긴 스니펫을 보여줘서 남겨본다.. #include #include int main(){ using namespace std; double d1 = (100 - 99.99); double d2 = (10-9.99); if(d1 == d2){ cout
동시성 문제에 대한 테스트를 위해 100개의 스레드에서 서비스에 접근하는 테스트를 하는 도중 latch.await을 했음에도 불구하고 계속해서 thread들이 끝나지도 않았는데, 테스트가 끝나는 문제가 있었다. 코드를 자세히 살펴보면 문제가 보이나, 맞다고 생각하고 대충보면 문제가 보이지 않는다... 이것 때문에 대략 1시간은 뻘짓을 한 것 같다.. @Test fun decrease_concurrent() { val threadCount = 100; val executorService = Executors.newFixedThreadPool(threadCount) val latch = CountDownLatch(threadCount); for (i in 1..threadCount){ kotlin.runCa..
ThreadLocal이란 각 쓰레드마다 저장소를 만들어 동시성 문제를 해결한다. spring을 사용하다 보면 주로 Bean들을 주로 싱글톤으로 생성하기 떄문에 동시성 문제에 빠질 수 있다. 2개 이상의 쓰레드에서 동시에 싱글톤 객체를 접근하여 싱글톤 객체의 필드를 수정하게 되면 동시성 문제에 빠지게 된다. 이 때 이 문제를 해결하는 방법중 하나로 쓰레드 로컬을 사용한다. 쓰레드 로컬은 쓰레드마다 각 저장소를 만들어 해당 쓰레드에서만 사용할 수 있는 로컬 저장소를 생성한다. 따라서 쓰레드에서 싱글톤을 동시에 접근해 수정해도 각자 쓰레드의 저장소를 사용하므로 문제가 되지 않는다. ThreadLocal 주의점 쓰레드로컬을 사용할 때 주의해야 할 것은 주로 WAS는 ThreadPool을 사용한다. 즉 Threa..
프로세스란? 프로세스는 어플리케이션을 실행시키면 생기는 것으로, OS로 부터 필요한 자원을 할당 받아 프로세스가 된다. 프로세스는 OS로 부터 할당 받은 자원을 이용해 쓰레드를 통해 어플리케이션을 동작시킨다. 즉 모든 프로세스는 하나이상의 쓰레드가 존재하며 쓰레드가 두개 이상인 것을 멀티쓰레드라고 한다. 쓰레드란? 위에서 언급했다시피 프로세스 내부에서 실제로 어플리케이션 행위를 하는 것이 쓰레드이다. 멀티쓰레드를 사용하게 되면 CPU사용률 향상, 자원 효율성 향상, 사용자의 응답성 향상 등 많은 장점이 있지만 교착상태, 동기화 등 문제가 생길 수 있기 때문에 주의가 필요하다. package spring.advanced; public class MyRunnableThread { Runnable myRunn..
자바란? 자바는 객체지향 프로그래밍 언어로 운영체제로 부터 독립적으로 실행할 수 있다. 자바의 역사 자바는 1991년 오크라는 언어로부터 시작되어 썬의 엔지니어들이 가전제품에 탑재하기 위한 소프트웨어를 만들 용도로 만든 언어이다. 자바는 정적인 웹페이지에 사운드와 애니메이션 등 멀티미디어적인 요소들을 제공할 수 있는 유일한 방법이였기 때문에 많은 인기를 얻게된다. 하지만 보안상의 이유로 더이상 사용되지 않고 현재는 Servlet과 JSP, 안드로이드, 웹개발에 자주 사용된다. 자바의 특징 운영체제에 독립적이다. ( 자바로 개발된 Application은 하드웨어와 직접 통신하지 않고 JVM을 통해 통신하기 때문에 운영체제에 알맞은 JVM만 존재한다면 운영체제와 상관없이 동작한다. 즉 운영체제마다 알맞은 J..
맨날 웹개발만 하다가 refresh를 위해 선택한 blockchain 추가로 떠오르는 언어인 go와 함께.. 2월달에 강의를 시작해서 오늘 드디어 끝냈다. blockchain 기본 구조와 go를 겉핥기 해본 것 같은데 좋은 경험이었다. 간단하게 복기 해보면 blockchain은 block들이 hash값을 가지고 서로 연결되어있다. block에는 유의미한 데이터를 넣고 탈중앙화 된 DB에 저장시킨다. (P2P 이용) 유저들은 이 탈중화된 DB를 가지고 서비스를 이용한다. P2P를 통해 각 노드들이 연결되거나 블럭이 추가되거나 mempool에 데이터가 추가되면 sync하는 과정을 ws로 진행했는데 꽤나 재밌었다. 그리고 나는 block에 bitcoin과 비슷하게 transaction을 넣었는데 이때 사용된 ..
Go에서 자주사용하는 GoRoutine에서 필수적인 Channel 흔히 사용하는 것은 unBufferChannel 이지만 bufferChannel의 존재를 알게 되어 정리함. 먼저 unBufferChannel은 말그대로 채널에 버퍼가 없기때문에 (공간이 하나밖에 없다는 말) channel에 데이터가 들어가면 그 데이터가 소비될 때까지 blocking이 된다. 하지만 bufferChannel은 코더가 채널의 버퍼 크기를 정해주어 channel에 해당 개수까지는 데이터가 차고 그다음에 데이터가 소비될 때까지 blocking 되는 것이다. package BufferdVersusUnBufferedChannel import ( "fmt" "math/rand" "time" ) var hamburgerMaterial..