假设我使用标准Java对象序列化来向/从内存缓冲区写入/读取小(<1K)Java对象.最关键的部分是反序列化,即从内存缓冲区(字节数组)中读取Java对象.
对于这种情况,是否有更快的标准Java序列化替代方案?
这是一个面试问题.假设有几台计算机,每台计算机都保存一个非常大的访问URL日志文件.查找前十个访问量最大的网址.
例如:假设只有3台计算机,我们需要前两个访问量最大的URL.
Computer A: url1, url2, url1, url3 Computer B: url4, url2, url1, url1 Computer C: url3, url4, url1, url3 url1 appears 5 times in all logs url2 2 url3 3 url4 2 So the answer is url1, url3
日志文件太大而无法放入RAM并通过网络复制它们.据我了解,重要的是使计算并行并使用所有给定的计算机.
你会如何解决它?
language-agnostic algorithm parallel-processing distributed-computing
可能重复:
计算数组中的反转
这是一个电话采访问题:"查找数组中的反转次数".我猜他们的意思是O(N log N)解决方案.我认为它不能比O(N log N)更好,因为这是排序的复杂性.
类似问题的答案可归纳如下:
a[i]找到它j在排序副本(二进制搜索)中的位置,并将距离的一半加起来abs(i - j)/2.修改merge sort:修改merge以计算两个已排序数组之间的反转,并merge sort使用修改后的数组运行merge.
是否有意义 ?还有其他(可能更简单)的解决方案吗?电话采访难道不是很难吗?
我正在阅读关于"贪婪"算法的教程,但我很难发现它们解决了真正的"顶级编码器"问题.
如果我知道某个问题可以通过"贪婪"算法解决,那么对解决方案进行编码就非常容易了.但是,如果我没有被告知这个问题是"贪婪的"我无法发现它.
使用"贪婪"算法解决问题的常见属性和模式是什么?我可以将它们减少到已知的"贪婪"问题之一(例如MST)吗?
阅读本文后,我理解>=>(Kleisli arrow)只是一个组合函数的高阶函数,它返回"monadic values".例如:
val f: A => M[B] = ... val g: B => M[C] = ... val h: A => M[C] = f >=> g // compose f and g with Kleisli arrow
它看起来像是一个简单的"简单"函数组合(即返回简单值的纯函数):
val f: A => B = ... val g: B => C = ... val h = f andThen g; // compose f and g
现在我猜这个"简单"的构图andThen符合某些规律
f andThen g == g和g andThen f …这是我上一个问题的后续行动
Travis Brown指出这java.util.Random是副作用,并建议使用随机monad Rng 库来使代码纯粹功能化.现在我正在尝试自己构建一个简化的随机monad以了解它是如何工作的.
是否有意义 ?您如何修复/改进下面的解释?
首先,我们抄袭随机生成函数 java.util.Random
// do some bit magic to generate a new random "seed" from the given "seed"
// and return both the new "seed" and a random value based on it
def next(seed: Long, bits: Int): (Long, Int) = ...
Run Code Online (Sandbox Code Playgroud)
请注意,next返回两个新的种子和价值,而不仅仅是值.我们需要它将新种子传递给另一个函数调用.
现在让我们编写一个函数来生成单位平方的随机点.
假设我们有一个函数来生成范围[0,1]中的随机双精度
def randomDouble(seed: Long): (Long, Double) = ... // some bit magic
Run Code Online (Sandbox Code Playgroud)
现在我们可以编写一个函数来生成一个随机点.
def randomPoint(seed: Long): (Long, (Double, Double)) …Run Code Online (Sandbox Code Playgroud) 这是一个面试问题.假设你有一个字符串text和一组dictionary(一组字符串).你如何分解text为子串,以便在每个子串中找到dictionary.
例如,您可以分解"thisisatext"为["this", "is", "a", "text"]使用/usr/share/dict/words.
我相信回溯可以解决这个问题(在伪Java中):
void solve(String s, Set<String> dict, List<String> solution) {
if (s.length == 0)
return
for each prefix of s found in dict
solve(s without prefix, dict, solution + prefix)
}
List<String> solution = new List<String>()
solve(text, dict, solution)
是否有意义?你会优化搜索字典中前缀的步骤吗?您会推荐哪些数据结构?
假设我想foo异步运行静态方法
void foo() throws Exception {...}
Run Code Online (Sandbox Code Playgroud)
由于foo抛出一个异常,我宁愿创建Callable并调用ExecutorService.submit它来获得Future.
现在我不知道如何申报的Callable和Future正确的.我应该申报吗?
Callable<Void> and Future<Void>?
Run Code Online (Sandbox Code Playgroud) 在斯卡拉兹
Kleisli[F, A, B]是一个包装A => F[B].ReaderT[F, A, B]- 读者monad变换器 - 只是别名Kleisli[F, A, B].Reader[A, B]monad是ReaderT身份monad 的专长Id:type Reader[A, B] = ReaderT[Id, A, B].难道仅仅是巧合还是有一些更深层次的原因Kleisli,ReaderT以及Reader是同构的Scalaz?
据我所知,node.js对Java Script程序员很有用,他们现在可以在服务器端开发.此外,一些Java Script代码可以从客户端移植到服务器端.
是否有任何其他的优点node.js与其他服务器端技术(Java web开发框架,比较RoR,Django等等)?