小编Ris*_*wal的帖子

Java中的尾调用优化

Java 8开始,Java不提供Tail-Call Optimization(TCO).在研究它时,我开始知道原因是:

在jdk类中,有许多安全敏感方法依赖于计算jdk库代码和调用代码之间的堆栈帧来确定谁在调用它们.

但是,基于JVM的Scala支持Tail-Call Optimization.Scala在编译时进行尾递归优化.为什么Java不能使用相同的方法?

PS:不确定Java的最新版本(现在的Java 11)现在是否具有TCO.如果有些知道的人也能分享这个,那就太好了.

注意

  1. 我知道TCO处于积压状态并且优先级较低,但是想知道为什么Java在编译时不能像Scala那样进行更改.

  2. 由于大多数命令式语言都没有Java,因此Java没有尾调用优化.命令式循环是该语言的首选样式,程序员可以用命令式循环替换尾递归.(来源)

java recursion jvm tail-recursion compilation

9
推荐指数
2
解决办法
1090
查看次数

并行流中的 Fork-Join Pool

我在网上搜索了各种文章和 Stack Overflow 问题,但我找不到完美的答案。有许多问题与此接近,但略有不同。

我们知道 Java 8 Streams API 在内部使用 Fork-Join Pool。

现在我的问题是如何使用 Fork-Join 池划分流管道中的任务?

假设我们有以下内容:

List myList =  inputList.parallelStream().filter( x -> x>0 )
    .map(x -> x+100 ).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在我们有两种使用线程池划分任务的选项。

  1. filtermap作为单个任务并使用 fork-join 池运行它。
  2. filtermap作为两个不同的任务,并使用两个不同的 fork-join 线程池运行它们。

我也知道流是延迟传播的,所以如果我们 在两者之间有一个 有状态的中间操作

List myList2 = inputList.parallelStream().filter( x -> x>0 )
    .map(x -> x+5 ).sorted().map(x -> x+5 ).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

那么如何创建线程池呢?

PS:之前就知道map功能是可以组合的。我只是想为这个问题举个例子。

java multithreading java-8 java-stream

5
推荐指数
1
解决办法
1443
查看次数

Hazelcast的多播发现

有人能说出HazelCast的多播发现是如何运作的.我想要每个成员的细节发现它的同行.我一直试图找到一些好的资源,但没有找到任何详细的解释.

java load-balancing distributed-computing hazelcast

2
推荐指数
1
解决办法
1330
查看次数

带有前缀0号的perl中的错误

当我尝试执行以下操作时(01434.210 instead of 1434.210)

$val=22749.220-(21315.010+01434.210)
print $val
Run Code Online (Sandbox Code Playgroud)

我得到这些输出

output 638.207900000001
Run Code Online (Sandbox Code Playgroud)

但根据我的输出必须0.

我错过了什么?

perl

0
推荐指数
1
解决办法
95
查看次数

使用 @SpringBootApplication 找不到 Bean

我在 JAVA 中遇到微服务问题。我不明白为什么我的代码不想编译。

我按照教程、视频(法语)创建一个简单的项目来熟悉微服务。

我创建了一个控制器、dao 和一个模型。当我编译控制器以访问 127.0.0.1.1port/Produits 时,它必须返回我在代码中定义的产品列表,但在编译时它显示我曾经有一只手:

“错误:在类中找不到方法main

“虽然正常启动项目我不需要手,因为它必须只是告诉我“好的,你可以去127.0.0.1/端口”(端口是在应用程序中定义的。属性并没有被占用)

这是我的项目的架构:

在此处输入图片说明

这是我要编译的控制器代码:

package com.ecommerce.microcommerce.controller;

import com.ecommerce.microcommerce.dao.ProductDao;
import com.ecommerce.microcommerce.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ProductController {

    @Autowired
    private ProductDao productDao;

    //Produits
    @GetMapping(value = "Produits")
    public List<Product> listeProduits() {
        return productDao.finAll();
    }

    //Produits/{id}
    @GetMapping(value = "Produits/{id}")
    public Product afficherUnProduit(@PathVariable int id) {
        Product product = new Product(1, new String("aspirateur"), 100);
        return product;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的 DAO 中的文件:

package com.ecommerce.microcommerce.dao;

import com.ecommerce.microcommerce.model.Product;
import java.util.List; …
Run Code Online (Sandbox Code Playgroud)

java compilation microservices

0
推荐指数
1
解决办法
496
查看次数

C ++中的不可变列表

如何在cpp中创建不可变列表?列表的引用及其数据应保持不变。

我不会在vector或任何其他容器上做包装器类(我知道与本文类似的方法)。

使用constexpr或进行此操作的最佳方法是什么const pointers

c++ immutability immutablelist

-1
推荐指数
1
解决办法
95
查看次数

为什么我的变量在我的 SELECT 语句中不起作用

session_start();
$username = $_SESSION['username'];

$db = new PDO("mysql:host=".DBHOST.";charset=utf8mb4;dbname=".DBNAME, 
DBUSER, DBPASS);

function keygrabber($username) { //You need to pass a variable into this 
function
global $db; //Gain access to the $db variable, which is out of scope due to 
being inside of a function
$stmt = $db->prepare("SELECT * FROM keys WHERE username='$username'"); 
//Prepare the query
$stmt->execute(); //Execute the query
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); //Fetch the query results
var_dump($results); //Dump the results
}

keygrabber($username);
Run Code Online (Sandbox Code Playgroud)

因此,如果我更改username='$username';username='myactualusername';,它会起作用,即它不会显示任何错误或任何内容。

我基本上试图从与用户用户名匹配的键中获取所有数据。将来我会将其更改为 userID,但现在变量不起作用,因此我无法继续。

谢谢您的帮助

php

-2
推荐指数
1
解决办法
73
查看次数