Wednesday, May 27, 2015

Brain teaser interview questions

identical balls. one ball is heavy. find the heavy ball with only 2 measurements ........ dead easy.
3     Split the 9 balls into three groups of 3 balls.
4     Choose two groups and weigh them on the balance:
5         If balanced, the heavy ball is in the other group.
6         If imbalanced, the heavy ball is in the heavier group.
7     Find the group with the heavy ball, pick two balls from the three and weigh them:
8         If balanced, the heavy ball is the other one.
9         If imbalanced, the heavy ball is the heavier one.
You have three jars filled with candies. One jar is filled with banana candies, one jar is filled with lemon candies and one jar has a mix of both. All the jars are mislabelled (i.e. all the jars have wrong labels about what kind of candies they contain). 
All the candies look very similar in shape, size and color and they even smell the same. The only way to distinguish them is by tasting. 
You have to eat one and only one candy to determine the correct jar labels. You can eat that one candy from any jar you want as long as you eat only one in total.

Suppose jar 1 is labelled lemon 
jar 2 -> banana 
jar 3 -> Mix 
Take a candy from the jar 3 which is labelled as Mix of both and eat. 

Suppose it is lemon, take the lemon label from the jar 1 and place it on jar 3. Now we are done. jar 2 will be mix, jar 1 banana from the fact that all jars have wrong labels. 

Same logic goes in case it turns out to be banana candy after eating.
var a = Math.random() < 0.5;
var b = !a;
这时候不知道 a 和 b 哪个是真哪个是假,但是一定知道 a && b 是假,a || b 是真。
联合两个人的说话,向 b 问:如果我问 a 这条路是否通向诚实图,他会怎么回答?

Monday, May 11, 2015

I Will Get That Job At Google. | Why using many threads in Java is bad

I Will Get That Job At Google. | Why using many threads in Java is bad
Each OS and JVM has its own thread settings and there is no concrete value of max thread limit. But it can be easily calculated. Using a lot of threads is bad not only because of their consumption.
Thread lifecycle overhead
Thread creation and teardown are not free. The actual overhead varies across platforms, but thread creation takes time, introducing latency into request processing, and requires some processing activity by the JVM and OS. If requests are frequent and lightweight, as in most server applications, creating a new thread for each request can consume significant computing resources.
Context switch
When OS decides to switch to another thread execution, there is a context switch - all the registers and data are being pushed to memory, CPU and RAM are being tuned to another thread, another thread restores its state agein etc. These operations aren’t too slow, but when there are hundreds or even thousands of threads, it can be a real disaster. OS will work inefficiently and most of time will be used to switch one context to another.
Thread data
Each thread had its stack (quite huge block, usually 256 Kb by default), its descriptors. Threads also may have ThreadLocal variables. With default settings only 4 threads consume 1 Mb of memory. It’s quite huge amount of memory!
System overhead
Thread creation in Java forces OS to create a memory block for stack and other data. It is done using system calls. The thread stack is allocated by the call to pthread_create that also creates the native thread. (The JVM does not pass pthread_create a preallocated stack.)
Then, within pthread_create the stack is allocated by a call to mmap as follows:
mmap(0, attr.__stacksize,
That means that for each thread at least one system native thread is being executed to prepare memory for it. It also has some overhead.
Efficiency comparison table
The one and only solution is to use horizontal scaling and to use thread pools which can help to re-use created threads. Don’t forget to reset ThreadLocal values!
Java Concurrency in Practice
Read full article from I Will Get That Job At Google. | Why using many threads in Java is bad


Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts