我最近开始学习JavaScript.我一直在用Node.js和Angular创建应用程序几个月了.
令我困惑的一个主要方面是如何在JavaScript中编写异步代码,我不必担心线程同步,竞争条件等问题.
所以,我发现了一些有趣的文章([1],[2]),这些文章解释了我如何能够保证我编写的任何代码片段当时都会由一个线程执行.最重要的是,我的所有异步代码都被安排在事件循环中的某个时刻执行.这听起来非常类似于OS调度程序可以在具有单个处理器的机器中工作,其中每个进程被安排在有限的时间内使用处理器,给我们假的并行感.回调就像中断.
文章没有提供任何特定的参考,所以我认为关于JavaScript执行引擎如何工作的最佳来源当然应该是语言规范,所以我给了我最新的EcmaScript 5.1副本.
令我惊讶的是,我发现在那里没有指定这种执行行为.怎么会?这看起来像是在浏览器和节点中的所有JavaScript执行引擎中完成的基本设计选择.有趣的是,我无法找到为任何特定引擎指定的地方.事实上,我不知道人们如何发现这是事情的工作方式,在上面引用的书籍和博客中如此明确地肯定.
所以,我有一套我认为有趣的问题.我很感激任何提供见解,评论或简单参考的答案,指出我正确的方向,以了解以下内容:
看起来有太多问题,也许这个帖子太宽泛而无法回答.如果它被关闭,我将尝试在不同的线程中询问它们.但它们都围绕着这样一个事实:我想更好地理解为什么JavScript和Node是用事件循环设计的,如果在某处(除了浏览器源代码)指定了我可以阅读并更深入地了解设计和决策在这里,更重要的是,要确切地知道人们撰写有关它的书籍和帖子的信息来源.
由于某些 BI 工具软件限制,我需要通过 JDBC 公开 Web 服务。
非常有限的支持需要很少的定义的选择查询。
据我所知,我需要在接口 java.sql 下实现所有类才能实现这一点。有没有人做过类似的事情?
我们是否有一些自定义实现,我们需要实现最少的代码。
当您计划使用像Haskell这样的函数式编程语言开发系统时,如何处理分析和设计阶段?
我的背景是命令式/面向对象的编程语言,因此,我习惯使用案例分析和使用UML来记录程序的设计.但事实是,UML本质上与面向对象的软件方式有关.
我很感兴趣的是,为将要使用函数式编程开发的系统开发文档和定义软件设计的最佳方法是什么.
haskell functional-programming analysis software-design purely-functional
我想知道是否有任何构造函数涉及内部类.例如,考虑下面给出的代码片段
class MyOuter
{
private int x= 10;
class MyInner
{
void dostuff(){
System.out.println("The value of x is "+x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个java文件中,我为MyOuter和MyInner类创建实例,如下所示
Class Program
{
public static void main(String [] args)
{
MyOuter mo = new MyOuter();
MyOuter.MyInner mi = mo.new MyInner();
mi.dostuff();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段编译得很好并且输出"x的值是10".
我想知道的是当new()与MyInner类和MyOuter类一起使用时是否调用构造函数.如果是,那么是否有任何构造函数从内部类链接到外部类(如子类调用超类的构造函数,依此类推).
我有一个Spring Boot 1.3.6应用程序,开箱即用并使用嵌入式Tomcat服务器.应用程序有一个端点执行非常简单的echo请求.
后来我定义了一个相应的客户端调用该简单端点使用AsyncRestTemplate,但是如果我的客户端使用Netty4ClientHttpRequestFactory该请求失败,否则它会成功.
我下面的例子是在Kotlin中,但它在Java中失败的情况也是如此,所以它与我用来实现它的语言没有关系.
@SpringBootApplication
open class EchoApplication {
companion object {
@JvmStatic fun main(args: Array<String>) {
SpringApplication.run(EchoApplication::class.java, *args)
}
}
@Bean
open fun objectMapper(): ObjectMapper {
return ObjectMapper().apply {
dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
registerModule(KotlinModule())
}
}
@Bean
open fun customConverters(): HttpMessageConverters {
return HttpMessageConverters(listOf(MappingJackson2HttpMessageConverter(objectMapper())))
}
}
Run Code Online (Sandbox Code Playgroud)
我的端点看起来像这样:
@RestController
class EchoController {
@RequestMapping(value="/foo", method = arrayOf(RequestMethod.PUT))
fun echo(@RequestBody order: Order): Order {
return order
}
}
Run Code Online (Sandbox Code Playgroud)
订单数据类是
data class Order(val orderId: String)
Run Code Online (Sandbox Code Playgroud)
注意:由于我使用Kotlin,我还添加了Kotlin Jackson模块 …
如果我遇到以下情况:
ObserverA,ObserverB,ObserverC都继承自AbstractObserver.
我创建了一个观察者列表:
List<AbstractObserver> list = new ArrayList<AbstractObserver>();
list.add(new ObserverA());
list.add(new ObserverB());
list.add(new ObserverC());
Run Code Online (Sandbox Code Playgroud)
并且具有以下方法的某种处理程序在"MAIN"线程中运行:
public void eat(Food item) {
for(AbstractObserver o : list) {
o.eatFood(item);
}
}
public void drink(Coffee cup) {
for(AbstractObserver o : list) {
o.drinkCoffee(cup);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何设计一个系统,我可以在不同的线程中运行每个eatFood和drinkCoffee方法的观察者?具体来说,当"MAIN"线程收到事件(饮料或吃方法被调用)时,如何在ObserverA,ObserverB和ObserverC中运行自己的线程中的eatFood或drinkCoffee方法?
我想为每个AbstractObserver子类实例设置不同的线程,因为目前我正在按顺序通知每个观察者,这可能会导致延迟.
构造函数是在运行时还是编译时添加的?(我想这是编译时).在JVM架构级别,我需要一些深入的解释.
我阅读了各种文章..有些人说编译器......还有其他人说JVM.我想非常肯定(证明会有很多帮助).
对不起,如果问题是愚蠢的(我还在消化术语)!
提前致谢.
这些天我一直在学习Scala,今天我遇到了一些我无法理解的问题.
假设我们有以下参数函数定义:
def filter[T](source: List[T], predicate: T=>Boolean): List[T] = {
source match {
case Nil => Nil
case x::xs => if(predicate(x)) x::filter(xs, predicate)
else filter(xs, predicate)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我按如下方式调用它,这可以正常工作:
filter(List(1,2,3,4,5,6), ( (n:Int) => n % 2 == 0))
Run Code Online (Sandbox Code Playgroud)
但是如果删除类型标记,则看起来Scala无法推断出T的类型是Int.
filter(List(1,2,3,4,5,6), ( n => n % 2 == 0))
Run Code Online (Sandbox Code Playgroud)
所以,我被迫在这次调用中提供显式类型信息.
有没有人知道为什么Scala无法在此调用中推断出T的类型.该列表显然是Ints列表,我不明白为什么它不能推断出n的类型也是Int.
java ×6
constructor ×2
jvm ×2
analysis ×1
asynchronous ×1
concurrency ×1
driver ×1
ecmascript-5 ×1
haskell ×1
internals ×1
java-8 ×1
javascript ×1
jdbc ×1
kotlin ×1
netty ×1
node.js ×1
optimization ×1
scala ×1
singleton ×1
spring ×1
spring-boot ×1