zoukankan      html  css  js  c++  java
  • Careercup

    2014-05-10 22:30

    题目链接

    原题:

    Design database locks to allow r/w concurrency and data consistency.

    题目:设计一个支持并行读写并保证数据一致性的数据库锁。

    解法:这是什么范畴的面试题?对于我这种完全没有相关项目经验的人,还真是无从下手。翻了书之后顺便重新复习了一下共享锁、互斥锁的概念。说白了,这些都是课本上的基础知识,可是毕业没多久就忘光了。看来知识不用,保质期比水果还短。然后我琢磨着锁的模型,写了个模拟的代码。这个代码和SQL毫无关系,可能也和正确答案相去甚远。姑妄言之,姑妄听之吧。

    代码:

     1 // http://www.careercup.com/question?id=6366101810184192
     2 import java.util.concurrent.Semaphore;
     3 
     4 public class FooBar {
     5     public static final int MAX_CONCURRENT_READ = 100;
     6     private Semaphore sharedSemaphore;
     7     private Semaphore exclusiveSemaphore;
     8 
     9     public FooBar() {
    10         // TODO Auto-generated constructor stub
    11         this.sharedSemaphore = new Semaphore(MAX_CONCURRENT_READ);
    12         this.exclusiveSemaphore = new Semaphore(1);
    13     }
    14 
    15     public void reader() {
    16         // The reader here is not to return a value, but to perform read()
    17         // action. Thus it is 'void reader()'.
    18         while (exclusiveSemaphore.availablePermits() < 1) {
    19             try {
    20                 Thread.sleep(50);
    21             } catch (InterruptedException e) {
    22                 // TODO Auto-generated catch block
    23                 e.printStackTrace();
    24             }
    25         }
    26 
    27         try {
    28             sharedSemaphore.acquire();
    29             System.out.println("Performing read() operation.");
    30             sharedSemaphore.release();
    31         } catch (InterruptedException e) {
    32             // TODO Auto-generated catch block
    33             e.printStackTrace();
    34         }
    35     }
    36 
    37     public void writer() {
    38         while (exclusiveSemaphore.availablePermits() < 1
    39                 && sharedSemaphore.availablePermits() < MAX_CONCURRENT_READ) {
    40             try {
    41                 Thread.sleep(50);
    42             } catch (InterruptedException e) {
    43                 // TODO Auto-generated catch block
    44                 e.printStackTrace();
    45             }
    46         }
    47 
    48         try {
    49             exclusiveSemaphore.acquire();
    50             System.out.println("Performing write() operation.");
    51             exclusiveSemaphore.release();
    52         } catch (InterruptedException e) {
    53             // TODO Auto-generated catch block
    54             e.printStackTrace();
    55         }
    56     }
    57 
    58     public static void main(String[] args) {
    59         FooBar fooBar = new FooBar();
    60 
    61         fooBar.reader();
    62         fooBar.writer();
    63     }
    64 }
  • 相关阅读:
    Munge
    file upload custom form
    随笔摘要
    生成css 和 清缓存
    drupal commit 原则
    Git reset --hard
    www-data
    301/302的区别
    什么是request_uri
    in_array foreach array_search的性能比较
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3721148.html
Copyright © 2011-2022 走看看