小编Dan*_*etz的帖子

FileWriter内存不足

我想格式化并将大型Map(1.785.530条目)的内容写入文本文件.大约85%的条目被处理后,它变得很慢,然后我得到了OutOfMemoryException.

出现同样的错误,即使我:

  • 定期打电话flush()或打电话close()给我FileWriter
  • 使用 BufferedWriter
  • StringBuffer在写入文件之前将每行写入a

这是我的代码:

private static final TreeMap<Date, Integer> accessesPerSecondMap = new    
    TreeMap<>();

...

private static void writeOutputFile() throws IOException {
    FileWriter writer = new FileWriter(FILENAME_OUTPUT);

    writer.write("Date");
    writer.write(',');
    writer.write("Request Count");
    writer.write('\n');

    for (Date date : accessesPerSecondMap.keySet()) {

        // first and last date are not precise so do not write it in the
        // file
        if (date == accessesPerSecondMap.firstKey()
                || date == accessesPerSecondMap.lastKey()) {
            continue;
        }

        writer.write(String.valueOf(date));
        System.out.println("FileMerger …
Run Code Online (Sandbox Code Playgroud)

java out-of-memory filewriter

10
推荐指数
3
解决办法
4077
查看次数

语法错误:无法在 aws 放大上读取未定义 (0:undefined) 构建的属性“map”

在 AWS Amplify 上构建时遇到以下错误:

语法错误:无法读取未定义的属性“映射”(0:未定义)

这是我的代码:

import React from 'react';   
import ReactDOM from 'react-dom'; 
export default class BusinessHTTPService {
static getBusinessList = () => {
  
    return axios.get(`${API_BASE}business-categories/?`).then(response => response.data);
  };
  
  }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

reactjs

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

具有反向跟踪的数独求解算法

我正在寻求实现一个非常简单的算法,该算法使用强力反向跟踪来解决数独网格.我现在面临的问题是,我在执行中,我有两个实例变量Sudoku称为类rowcol,对应于空单元格的行和列在代表数独网格二维数组.

当我的solve()方法执行时,它首先检查是否没有任何空单元格,在这种情况下拼图已经完成.否则,同一方法将空单元格的行和列分配给实例变量row和包含网格colSudoku对象.之后,for循环验证通过方法调用可以在该空单元格中放置哪个数字isSafe(int n)(此方法检查是否满足拼图的约束,我可以保证它完美地运行).因此,该isSafe()方法在空单元格中放置一个数字,然后solve()在该Sudoku对象上再次对该方法进行递归调用.

如果我们遇到了无法满足的约束,那么我们将a重新分配0给最后一个row并且col填充了.这就是问题所在!由于程序不断更新rowcol变量,因此每次递归调用都会丢失旧实例.我一直在试图弄清楚如何存储这些值,以便程序可以在回溯时撤消操作.我想过互推colrow到堆栈,但我真的不知道该去哪里.

有人能告诉我解决这个问题的简单方法是什么?我不包括整个班级,如果你觉得它有用,请告诉我,我会发布.

class Sudoku {
    int SIZE, N, row, col;
    int Grid[][];    

    public boolean solve() {
        if (!this.findNextZero()) return true;

        for (int num = 1; num <= 9; num++) {
            if (isSafe(num)) {
                this.Grid[this.row][this.col] = num;

                if (this.solve()) return true;

                this.Grid[this.row][this.col] …
Run Code Online (Sandbox Code Playgroud)

java recursion sudoku

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

将ActionBar添加到PreferenceActivity

我正在尝试Settings Activity使用a PreferenceActivity.问题是ActionBar无论我做什么都不会出现.

我试过getSupportActionBar,getActionBar,setActionBar.什么都行不通.我用ActionBars 看到其他应用程序设置.他们不用PreferenceActivity吗?

java android android-preferences android-activity android-actionbar

8
推荐指数
2
解决办法
5234
查看次数

如何在达到第一个"无"时停止构建选项[集合]?

在内部构建集合时Option,每次尝试使集合的下一个成员都可能失败,从而使集合整体失败.在第一次未能成为会员时,我想立即放弃并返回None整个收藏.在Scala中执行此操作的惯用方法是什么?

这是我提出的一种方法:

def findPartByName(name: String): Option[Part] = . . .

def allParts(names: Seq[String]): Option[Seq[Part]] =
  names.foldLeft(Some(Seq.empty): Option[Seq[Part]]) {
    (result, name) => result match {
      case Some(parts) =>
        findPartByName(name) flatMap { part => Some(parts :+ part) }
      case None => None
    }
  }
Run Code Online (Sandbox Code Playgroud)

换句话说,如果任何调用findPartByName返回None,则allParts返回None.否则,allParts返回Some包含集合的集合Parts,所有集合都保证有效.空集合是可以的.

以上优点是它findPartByName在第一次失败后停止呼叫.但foldLeft无论如何,仍然会为每个名称迭代一次.

这是一个版本,只要findPartByName返回一个拯救None:

def allParts2(names: Seq[String]): Option[Seq[Part]] = Some(
  for (name <- …
Run Code Online (Sandbox Code Playgroud)

monads scala optional scala-collections scala-option

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

REST服务和竞争条件

让我们想象一个问题:我有一个REST服务,它使用Java/MySQL/Spring和HTTP/JSON技术实现.REST服务的客户端是移动应用程序.所以有人可能会反编译代码并获得REST服务的API.(是的,代码是混淆等的,但无论如何).

问题:有一种POST方法可以向应用程序的其他用户汇款.我很担心,有人可以获得API,编写机器人并使此POST请求每秒500或5,000或甚至50,000次.结果,他可能会发送比实际更多的钱,因为如果同时处理1000个请求,那么对于所有1000个请求,余额检查可能会成功,但是一个帐户上的实际金额可能只够用于,假设,50个请求.

所以,基本上,它更像是具有多个线程的标准"竞争"条件.问题是,我有多台服务器,无论如何它们彼此无关.那么,300个请求可以来到服务器A,300个请求可以来到服务器B并且其他请求可以来到服务器C.

我最好的想法是使用"SELECT ... FOR UPDATE"之类的东西并在数据库级别上进行同步.但是,我想考虑另一种解决方案.

任何想法或建议?

java rest race-condition

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

在 Android Gradle 任务中获取已编译的 .class 输出目录

我正在为我的 Android 项目创建一个 Gradle 任务,该任务需要知道编译.class文件的路径。我怎样才能得到这条路?我找到了一些建议(这里这里;另请参阅Gradle 文档SourceSet),它们sourceSets.main.output.classDir会给我这条路径,但是当我尝试使用它时,出现错误

'output'在源集上找不到属性main

即使我创建一个新的、最小的项目,也会发生这种情况build.gradle

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
    }
}
apply plugin: 'android'
android {
    compileSdkVersion 22
    buildToolsVersion "20.0.0"

    task printClassesDir << {
        println sourceSets.main.output.classesDir
    }
}
Run Code Online (Sandbox Code Playgroud)

这个最小的项目构建得很好,但是如果我运行 task 会出现那个错误printClassesDir。如何.class在我的任务中获取文件输出目录?


我也试过的建议,<build variant>.javaCompile.classpath这个回答另一个问题。我能够访问这个属性

applicationVariants.find{it.name == 'debug'}.javaCompile.classpath
Run Code Online (Sandbox Code Playgroud)

但是这个文件集合是空的。


作为参考,这里是我的最小项目的其他文件:

src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="a.b">
  <uses-sdk
      android:minSdkVersion="9"
      android:targetSdkVersion="22" />
  <application> …
Run Code Online (Sandbox Code Playgroud)

android gradle source-sets build.gradle android-gradle-plugin

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

将 Postgres 的 current_timestamp 设置为常量以进行 JUnit 测试?

我正在使用 JUnit 来测试访问 Postgres 数据库的存储库。

我的所有测试数据都是手动设置的,因此我确切地知道我期望在结果中得到什么值。我在测试使用的语句时遇到了麻烦current_timestamp,例如select * from phone_number where current_timestamp <= expires;

问题是我的测试数据是恒定的,但current_timestamp随着每次测试执行而随时间推移。

有没有办法让current_timestamp返回值恒定?

当然,这将是多种选择之一,我还有三种解决方案:

  • 在我的测试数据中定义一个基准日期(即纪元,类似base_date timestamp default current_time)。所有其他数据被定义为该纪元数据之后的间隔(例如base_date + interval '1 day')。了解测试的大致运行时间后,我可以设置expires在测试期间绝对不会超出的时间戳(例如,base_date运行时间为秒后的几小时后)。不过,在我的测试数据中包含变量值会使检查变得更加困难。
  • 我可以停止使用current_timestamp并在我的所有语句中使用额外的时间戳参数,在正常使用(在Java中)中将类似于System.currentTimeMillis()new java.util.Date()(在任何情况下,“现在”),并且在我的测试中我可以传递恒定日期。不过,我不喜欢这个解决方案,因为a)它引入了正常使用(测试之外)中不需要的更改b)附加参数是附加错误的来源。
  • 定义一个存储过程,current_timestamp除非存在某个值(表明“测试模式”已打开),否则该过程将返回,并且应返回一个常量。这实际上可能效果最好,但如果 Postgres 中有一种简单的方法来控制current_timestamp返回的内容,则可能没有必要。

java postgresql junit

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

如何使用JSR-223在sbt控制台中获取Scala解释器?

在sbt控制台,sbt版本0.13.5,Scala版本2.11.1,我可以得到javax.script.ScriptEngineScala:

scala> val engine = new javax.script.ScriptEngineManager().getEngineByName("scala")
engine: javax.script.ScriptEngine = scala.tools.nsc.interpreter.IMain@bf78a9
Run Code Online (Sandbox Code Playgroud)

但是,我不能用它:

scala> engine.eval("3")
[init] error: error while loading Object, Missing dependency 'object scala in compiler mirror', required by /usr/lib/jvm/java-7-openjdk-i386/jre/lib/rt.jar(java/lang/Object.class)

Failed to initialize compiler: object scala in compiler mirror not found.
** Note that as of 2.8 scala does not assume use of the java classpath.
** For the old behavior pass -usejavacp to scala, or if using a Settings
** object programatically, settings.usejavacp.value = true.
scala.reflect.internal.MissingRequirementError: object …
Run Code Online (Sandbox Code Playgroud)

scala sbt jsr223 scala-2.11

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

对 SQL 子查询的结果使用“LIKE”

以下查询对我来说非常好:

SELECT * From Customers
WHERE Customers.ContactName = (SELECT FirstName
                               FROM Employees as E, orders as O
                               WHERE <condition>
                               LIMIT 1);
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用LIKE而不是=与子查询的结果进行比较,则不会得到任何结果。如何LIKE '%%'在上述查询中使用?

mysql sql subquery sql-like

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