小编hot*_*oup的帖子

Mac clang 安装似乎覆盖了 GCC 安装

Mac 10.13.6 High Sierra 在这里。作为 C 开发新手,我正在尝试使用最新的稳定/推荐的 GCC 版本进行设置,我相信(请诚实地说)是 10.2。

当我进入终端查看已安装的内容时:

$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ gcc -dumpversion
4.2.1
Run Code Online (Sandbox Code Playgroud)

好的...很惊讶地在输出中看到 LLVM/clang 相关的内容。所以我尝试这个:

$ clang --version
Apple LLVM version 9.1.0 (clang-902.0.39.1)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
Run Code Online (Sandbox Code Playgroud)

所以它几乎就像...我两者都clang安装gcc了,但是我的clang安装已经同化了我的 GCC 安装?!否则为什么gcc --version输出引用会发出叮当声?

这是 Mac 设置的典型情况吗?

我需要做什么才能在我的计算机上正确安装 GCC 10.2?

macos gcc clang

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

Docker Compose:在 $PATH 中找不到可执行文件:未知

我的项目目录结构:

myapp/
    src/
    Dockerfile
    docker-compose.yml
    docker-deploy.sh
    wait-for-it.sh
    .env
Run Code Online (Sandbox Code Playgroud)

wait-for-it.sh著名的等待脚本的副本在哪里?

我的Dockerfile

FROM node:16

WORKDIR /usr/src/app

COPY package*.json ./
COPY wait-for-it.sh ./
COPY docker-deploy.sh ./

RUN chmod +x docker-deploy.sh

RUN npm install --legacy-peer-deps

COPY . .

RUN npm run build

ENTRYPOINT ["docker-deploy.sh"]
Run Code Online (Sandbox Code Playgroud)

并且docker-deploy.sh是:

#!/bin/bash

# make wait-for-it executable
chmod +x wait-for-it.sh

# call wait-for-it with passed in args and then start node if it succeeds
bash wait-for-it.sh -h $1 -p $2 -t 300 -s -- …
Run Code Online (Sandbox Code Playgroud)

node.js docker dockerfile docker-compose

9
推荐指数
1
解决办法
1万
查看次数

从 Gradle 构建中复制 Maven“dependencyManagement”标签

我正在尝试遵循此 Spring Boot/Vaadin 指南 ,但我使用的是 Gradle,而不是Maven。

在该指南的最顶部,他们说使用以下 Maven XML:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>10.0.11</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

但是我没有看到dependencyManagement可以通过 Gradle 执行的任务。所以我问:如何<dependencyManagement/>在“Gradle land”中复制与上面的 XML 元素相同的行为?

更新:当前尝试

dependencyManagement {
     imports {
          mavenBom 'com.vaadin:vaadin-bom:10.0.11'
     }
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当我将其添加到我的build.gradle然后运行时./gradlew clean,我收到以下 Gradle 错误:

找不到参数的方法 dependencyManagement()...

gradle maven spring-boot

8
推荐指数
1
解决办法
7824
查看次数

Java 8流/映射/过滤器可即时修改或删除列表元素

Java 8在这里。寻找一种(可能基于流的)“ Java 8”替换和/或删除对象的方法List。这是我的代码:

public void applyChanges(List<Fizz> fizzes, Action action, Fizz toModify) {
  int i = 0;
  for (Fizz fizz : fizzes) {
    i++;
    if (fizz.getId() == toModify.getId()) {
      switch(action) {
      case Replace:
        // Here we want to replace 'fizz' in the list
        // with 'toModify' however order/sequence doesn't matter.
        fizzes.remove(i);
        fizzes.add(toModify);
        break;
      case Delete:
      default:
        // Here we just want to remove the Fizz with the matching
        // ID from 'fizzes'.
        fizzes.remove(i);
        break;
      }
    }
  }
} …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

7
推荐指数
1
解决办法
220
查看次数

Scala如何利用更多内核而不是Java或其他非功能语言?

我最近正在收听Martin Odersky的视频,他试图解释功能语言(例如Scala,当然不一定是 Scala)的基本优势,而不是 OOP或程序语言.

他解释说,摩尔定律最近使我们失败,因此为了使处理器"更快",而不是能够使核心中的晶体管数量增加一倍,CPU制造商只是提供更多核心.这反过来又使CPU可以通过并发/多线程应用程序更充分地利用CPU.因此主要的用处是:应用程序并发的越多,其代码的更多代码段在不同的内核上同时运行,并且CPU上的内核越多,程序执行的总体速度就越快.

到现在为止还挺好.

他未能解释的(或者更可能的是,我没有掌握的内容)是为什么像Scala 这样的函数式语言能够使其与其他非函数式语言更加并发.由于我们碰巧讨论的是JVM空间,让我们快速比较Java和Scala.什么是Scala程序,如果它是用纯Java实现的,会使并行化/并发化更加困难,特别是如果它全部编译为JVM字节码并在具有相同本机功能的相同JVM上运行?

意思是我有两个JVM应用程序,用Java编写的App1和用Scala编写的App2.他们都完成相同的任务并完成相同的任务.两者都被编译为JVM字节码,并在安装了相同JVM的同一台计算机上运行.Scala应用程序如何"利用"JVM功能使其更适合并发性而不是Java(因此,在具有更多内核的CPU上更快)?

java concurrency functional-programming scala multicore

6
推荐指数
1
解决办法
210
查看次数

本地 git 分支与 origin 保持同步意味着什么?

在本地存储库的根目录中,我从功能分支切换回develop

$ git checkout develop
Switched to branch 'develop'
Your branch is up to date with 'origin/develop'.
Run Code Online (Sandbox Code Playgroud)

请注意最后一条信息消息:您的分支已更新为 'origin/develop'。对我来说,这意味着我的分支完全跟上了HEADorigin/develop并且没有新的更改需要拉动。

但当我这样做时...

$ git pull
remote: Counting objects: 10, done.
Unpacking objects: 100% (10/10), done.
From ssh://my-code-commit/v1/repos/myproj
   5840bf6..cc91737  develop    -> origin/develop
Updating 5840bf6..cc91737
Fast-forward
 src/main/java/com/me/myapp/processor/Fizzbuzz.java      |  39 +++++++++++++++++++++++++++++++++++++++
 src/main/java/com/me/myapp/processor/Foobar.java       |   6 ++----
 src/main/resources/META-INF/spring/routes/FlimFlam.xml |  21 +++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)

哇啊啊啊?!怎么会这样?!develop如果我的本地“是最新的” ,怎么可能进行远程更改origin/develop?!

这是一个误导性的消息,还是我从根本上误解了 git 说我是最新的意味着什么?

git

6
推荐指数
1
解决办法
4382
查看次数

重写双嵌套for循环作为Java 8流

我有以下Java方法:

public List<GrantedAuthority> toAuthorities(Set<Role> roles) {
    List<GrantedAuthority> authorities = new ArrayList<>();

    if (null != roles) {
        for (Role role : roles) {
            for (Permission permission : role.getPermissions()) {
                authorities.add(new SimpleGrantedAuthority("ROLE_" + permission.getLabel()));
            }
        }
    }

    return authorities;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Java 8流重写它.迄今为止我最好的尝试:

public List<GrantedAuthority> toAuthorities(Set<Role> roles) {
    List<GrantedAuthority> authorities = new ArrayList<>();

    if (null != roles) {
        roles.stream().filter(role -> ???).collect(Collectors.toList());
    }

    return authorities;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道我在流过滤器中所添加的内容(替代???)......任何想法?

java java-8 java-stream

6
推荐指数
1
解决办法
465
查看次数

在 Java 8 中使用 Optional.empty 默认 Optional orElse

Java 8 在这里。我需要在两个 POJO 列表中搜索一个字符串,并希望正确使用 Stream/Optional API。

如果名称出现在第一个列表 (" lunches") 中,那么我想返回一个包含它的可选项。否则,如果名称出现在第二个列表 (" dinners") 中,那么我想返回一个包含它的可选项。否则,Optional.empty()如果该名称不存在于任一列表中,我想返回。迄今为止我最好的尝试:

public class Restaurant {

    private String id;
    private String name;
    private List<Food> lunches;
    private List<Food> dinners;

    public Optional<Food> findFoodByName(String name) {

        return Optional.of(lunches.stream()
                                  .filter(food -> food.getName()
                                                      .equalsIgnoreCase(name))
                                  .findFirst())
                       .orElse(dinners.stream()
                                      .filter(food -> food.getName()
                                                          .equalsIgnoreCase(name))
                       .findFirst());
//                     .orElse(null);        TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?

    }

}
Run Code Online (Sandbox Code Playgroud)

谁能帮我在这里越过终点线?

java java-8 java-stream

6
推荐指数
1
解决办法
381
查看次数

IntelliJ 可以在调试模式下运行 Maven 项目,但会忽略断点

我有一个 Java 8/Spring Boot/Maven 应用程序,可以在我的 IntelliJ IDE 中运行。当我单击绿色箭头(下方右上角)时,会显示一个控制台,一切都会正常启动,我可以在浏览器中使用该应用程序,通过curl 访问端点等。

我现在正在尝试让调试器工作。当我停止应用程序,然后通过单击调试器(上面的屏幕截图中播放图标旁边的绿色错误图标)重新启动它时,应用程序再次启动,没有任何问题。问题是,我设置的断点(在运行之前)没有执行!这意味着当应用程序遇到一行设置了断点的代码时,该过程不会暂停,并且我没有看到 IntelliJ 挂在该代码行(等待我采取行动),就像我在其他项目中习惯的那样。

例如,上面的SpringApplication.run(...)方法上设置了一个断点。但是当我在调试模式下启动它时,它只是启动并且永远不会在那一行停止!

这是我对该项目的编辑配置设置:

有什么看起来不对劲吗?我是否需要设置一些不同/特殊的东西才能进行调试?提前致谢。

debugging intellij-idea maven

6
推荐指数
1
解决办法
3966
查看次数

Docker Compose 似乎无法读取 env 文件中定义的 env 变量

我有以下项目目录结构:

myapp/
    docker/
        docker-compose.yml
    .env
    src/
        <my source code here>
    config.properties
Run Code Online (Sandbox Code Playgroud)

这是我的.env文件:

ENV=local
SERVICE_DB_HOST=0.0.0.0
SERVICE_DB_PORT=3306
SERVICE_DB_ROOT_PASSWORD=12345
SERVICE_DB_APP_USER=my-service-user
SERVICE_DB_APP_PASSWORD=23456
Run Code Online (Sandbox Code Playgroud)

这是我的docker/docker-compose.yml

version: "3.7"
services:
  myapp-main-db:
    env_file:
      - ../.env
    image: mysql:8
    container_name: myapp-main-db
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - $SERVICE_DB_PORT:$SERVICE_DB_PORT
    environment:
      MYSQL_ROOT_PASSWORD: $SERVICE_DB_ROOT_PASSWORD
      MYSQL_DATABASE: myapp_service_db_$ENV
      MYSQL_USER: $SERVICE_DB_APP_USER
      MYSQL_PASSWORD: $SERVICE_DB_APP_PASSWORD
    volumes:
      - myapp-service-db-data:/var/lib/mysql
volumes:
  myapp-service-db-data:
Run Code Online (Sandbox Code Playgroud)

当我docker-compose -f docker/docker-compose.yml up -d从项目根目录运行时,我看到 MySQL 容器毫无问题地启动,并通过docker ps.

但是,我无法使用预期的连接字符串和凭据连接到它,我确信这正确的。这让我相信 Docker Compose 没有../.env按照我的预期加载文件,因此中定义的任何变量都../.env不会作为环境变量注入。

有人能发现我哪里出了问题吗?

更新 …

docker docker-compose

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