小编cod*_*edd的帖子

理解Java并发中的外来方法

我正在阅读J. Bloch的有效Java,现在我正在关于外来方法的部分.

我正在尝试理解Java并发中的外来方法及其可能造成的危害.正如他所说,我们基本上不知道外星人的方法可以做什么,我们可能最终陷入僵局.我试图重现这样一个死锁行为编写以下简单的应用程序(为简单起见,外来方法在同一个类中):

public class App {
    private static StringBuffer lines = new StringBuffer();

    public static void modifyLines(){
        System.out.println("Invocation modifyLines() started by " + Thread.currentThread().getName());
        synchronized (lines) {
            System.out.println("Entering modifyLines() synchronized " + Thread.currentThread().getName());
            lines.append("Modified");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        synchronized (lines) {
            System.out.println("Entering main() synchronized by " + Thread.currentThread().getName());
            alienMethod();
        }
    }

    public static void alienMethod(){
        ExecutorService es = Executors.newSingleThreadExecutor();
        es.submit(new Runnable() {
            @Override
            public void run() {
                modifyLines();
            }
        });
        es.shutdown();
    }
} …
Run Code Online (Sandbox Code Playgroud)

java multithreading

7
推荐指数
2
解决办法
1127
查看次数

方法覆盖和多态

我正在尝试创建一个允许用户进入酒店房间的程序.该程序应检查房间是否空闲,然后分配一个免费房间(如果有的话).我有多种房型,如单人房,双人房,双人房等,都需要从基层继承Room.

这是我目前的代码.

public class Room 
{
    public static bool[] av = { false, true, false };

    public bool availability()
    {
        bool a = false;
        foreach (var roomAv in av)
        {
            a = a || roomAv;
        }
        return a;
    }

    public bool availability(int room)
    {
        return av[room];    
    }

    public int allocate()
    {
        if (availability())
        {
            int room = 0;
            while (!av[room])
            {
                room++;
            }
            av[room] = false;
            return room;
        }
        else
        {
            return -1;
        }
    }

    public static void …
Run Code Online (Sandbox Code Playgroud)

c# inheritance

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

超出了最大递归深度,但仅限于使用装饰器时

我正在编写一个程序来计算Python中的Levenshtein距离.我实现了memoization,因为我正在递归地运行算法.我的原始函数在函数本身中实现了memoization.这是它的样子:

# Memoization table mapping from a tuple of two strings to their Levenshtein distance
dp = {}

# Levenshtein distance algorithm
def lev(s, t):

  # If the strings are 0, return length of other
  if not s:
    return len(t)
  if not t:
    return len(s)

  # If the last two characters are the same, no cost. Otherwise, cost of 1
  if s[-1] is t[-1]:
    cost = 0
  else:
    cost = 1

  # Save in dictionary if never calculated before
  if …
Run Code Online (Sandbox Code Playgroud)

python recursion decorator memoization python-3.x

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

Notepad++ 如何保存工作区的状态?

我看到一旦我打开一个新文件并在其中写入一些内容,即使我不保存它,当我再次打开 notepad++ 时,该文件也会打开。那么如何在notepad++中保存工作区的状态,即使我不保存呢?任何人都可以指出它的实现源代码吗?

谢谢!

implementation state notepad++

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

这些JSON Perl模块之间有什么区别?

下面的Perl JSON模块有什么区别?

我遇到过JSON :: PPJSON :: XS.JSON :: PP的文档说它与JSON :: XS兼容.那是什么意思?

我不确定它们之间有什么区别,更不用说它们中的哪一个了.有人可以澄清吗?

perl json

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

如何解决 org.hibernate.NonUniqueObjectException:具有相同标识符值的不同对象已与会话关联:

我正在List使用 hibernate 保存 a ,但它会引发以下异常:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码如下,但我不知道为什么它会引发异常:

public void save(List<UserItem> list)
{
    //getHibernateTemplate().saveOrUpdateAll(list);

    //getHibernateTemplate().deleteAll(list);
    sessFactory = getHibernateTemplate().getSessionFactory();
    Session session = sessFactory.getCurrentSession();
    for (UserItem bean : list) {
        session.saveOrUpdate(bean);
    }
}
Run Code Online (Sandbox Code Playgroud)

正确的保存方法是什么List

java hibernate

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

使用多个视口修复窗口中的严重闪烁

摘要

我有一个地方一个相当规模的系统JFrame与一个GLCanvas正在被用来渲染场景(使用OpenGL).绘图表面canvas可以分为几个(例如4个)视口.场景对象在不同时间呈现,并且canvas.display()在处理整个场景的内容之前需要多次调用.

我根据文档设置canvas.setAutoSwapBufferMode(false);并手动调用canvas.swapBuffers();.我在渲染每个视口的内容后执行此操作,以便每个帧交换一次后缓冲区,而不是每个视口一次,这是JOGL在每次display(GLAutoDrawable)传递后默认自动执行的操作.(请注意,只需保留默认行为,问题就不会消失,但仍需要手动执行此操作.)

我遇到的问题是我在某些 OS/GPU设置中看到了严重的闪烁效果.(请参阅下面的屏幕截图以获取示例.)我可以在以下设置中测试我的代码:

  • Kubuntu 17.04 + NVIDIA GTX-960M(主开发系统)
  • Windows 10 + NVIDIA GTX-960M
  • Kubuntu 17.04 + NVIDIA GTX-770
  • Windows 7 + NVIDIA GTX-770M

在这些设置中,只有我的主开发系统看起来是正确的,但在其他设置中,以不同的方式观察到严重的闪烁和/或其他伪像.

看起来像一个后台缓冲管理问题,但我不清楚原因是什么,我没有观察到OpenGL错误代码.

我在较大的系统中使用该方法编写了一个MCVE(下面的代码)来单独重现该问题.请注意,我使用glViewportglScissor限制在特定display(GLAutoDrawable)调用期间更新视口区域.(是的,GL_SCISSOR_TEST已启用.)

我的问题是:

  1. 我的MCVE中的缓冲区管理对您来说是否正确?
  2. 在同一窗口中渲染多个视口的正确方法是什么?
  3. 难道别的脱颖而出,成为问题的一个潜在的原因是什么?

提前致谢.


我已经讨论了其他几个问题,但他们的探测器是不同的(例如重叠的视口,但我不是试图重叠它们).此外,他们没有使用JOGL及其基础设施,但我的是.

我也看到过早的问题指向过时的NeHe教程(例如这个)但是甚至尝试了文章提出的内容(即在渲染开始之前清除颜色缓冲区,然后在渲染每个视口之前只有深度缓冲区)不起作用按照预期并介绍了本文范围之外的其他问题.


MCVE代码示例

此代码示例至少需要JOGL和OpenGL 4.0.随意复制/粘贴并在本地运行.

import …
Run Code Online (Sandbox Code Playgroud)

java opengl jogl viewport

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

为什么Google Guava提供了存在等效构造函数的静态方法?

我注意到Google Guava Sets类提供的方法,如newHashSet取一个IterableIterator.HashSet与Java捆绑在一起的类已经提供了一个构造函数,Collection从而提供类似的行为.

所以我很好奇......这些特殊的静态方法在番石榴集中有什么优势?是否只是可能存在Iterable或者不是一个Iterator对象?或者番石榴团队还有其他目的需要包括这些方法吗?Collection

java constructor guava

4
推荐指数
1
解决办法
191
查看次数

为什么 clap 添加到 Cargo.toml 时无法编译?

概括

\n\n

我对 Rust 相当陌生,并决定使用它将现有项目移植到其中。我打算使用clap来处理 CLI 选项,但我不断收到错误。

\n\n

我需要做什么才能clap正确安装,以便它可以在我的项目中作为依赖项使用(例如extern crate clap; [...] use clap::App; [...]

\n\n

我还没有遇到其他板条箱的问题(到目前为止),所以我不确定这里有什么不同,或者板条箱本身是否有问题。

\n\n

我已经看到了一些问题(例如这个),这只是建议将依赖项添加到文件中.toml,否则似乎无法为我所看到的问题提供解决方案。

\n\n

我使用的是 Ubuntu Linux,如果这有什么区别的话。

\n\n

我尝试过的

\n\n

添加clap = "2.33.0"到我的Cargo.toml文件(请参阅https://crates.io/crates/clap)会导致 VSCode(通过 RLS)记录以下内容:

\n\n
{\n    "resource": "[...]/Projects/takeout/Cargo.toml",\n    "owner": "rust",\n    "severity": 8,\n    "message": "Could not compile `clap`.\\nprocess didn\'t exit successfully: `[...]/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rls --crate-name clap [...]/.cargo/registry/src/github.com-1ecc6299db9ec823/clap-2.33.0/src/lib.rs --color never --crate-type lib --emit=dep-info,metadata -C debuginfo=2 --cfg \'feature=\\"ansi_term\\"\' --cfg \'feature=\\"atty\\"\' --cfg \'feature=\\"color\\"\' …
Run Code Online (Sandbox Code Playgroud)

rust rust-crates rust-cargo

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

将指针作为C++类中的成员字段是愚蠢的吗?

我想检查我理解正确.如果我在标题中有以下内容:

public Obj * objPtr;
Run Code Online (Sandbox Code Playgroud)

以及课堂上的以下内容:

void create() {
    //create a local variable object
    Obj localVar = object();
    objPtr = &localVar;
}

void edit(){
    //attempt to edit value of member pointer
    objPtr->edit();
}
Run Code Online (Sandbox Code Playgroud)

我是否认为它永远不会起作用?因为localVar是本地的,它会在create函数之外被销毁一次,使objPtr具有空内存的地址,这意味着objPtr是一个空指针?

其次,如果我做了它会工作: Obj localVar = new object()或者 objPtr = new object()

c++ pointers heap-memory stack-memory

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

为什么创建列表列表会产生意外行为?

编辑:这个问题是关于为什么这种行为是这样的,而不是如何绕过它,这就是所谓的重复的内容。


我使用以下符号在不同情况下创建特定大小的列表。例如:

>>> [None] * 5
[None, None, None, None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

这似乎按预期工作并且短于:

>>> [None for _ in range(5)]
[None, None, None, None, None]
>>>
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用相同的方法创建列表列表:

>>> [[]] * 5
[[], [], [], [], []]
>>>
Run Code Online (Sandbox Code Playgroud)

很公平。它似乎按预期工作。

然而,在检查调试器时,我注意到所有子列表存储桶都具有相同的值,即使我只添加了一个项目。例如:

>>> t = [[]] * 5
>>> t
[[], [], [], [], []]
>>> t[1].append(4)
>>> t
[[4], [4], [4], [4], [4]]
>>> t[0] is t[1]
True
>>>
Run Code Online (Sandbox Code Playgroud)

我并不期望所有顶级数组元素都是对单个子列表的引用;我期望有 5 个 …

python list python-3.x

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

尽管没有保留原始顺序,为什么 python 的排序被称为稳定?

概括

从 Python 2.2 开始,Python 中的排序保证是稳定的,如此此处所述

维基百科解释了稳定的属性对算法的行为意味着什么:

一个排序算法是稳定的,如果当有两条记录 R 和 S 具有相同的键,并且 R 在原始列表中出现在 S 之前,那么 R 将始终出现在排序列表中的 S 之前。

但是,在对元组等对象进行排序时,排序似乎不稳定。

例如,

>>> a = [(1, 3), (3, 2), (2, 4), (1, 2)]
>>> sorted(a)
[(1, 2), (1, 3), (2, 4), (3, 2)]
Run Code Online (Sandbox Code Playgroud)

然而,为了稳定,我认为新的序列应该是

[(1, 3), (1, 2), (2, 4), (3, 2)]
Run Code Online (Sandbox Code Playgroud)

因为,在原始序列中,元组(1, 3)出现在 tuple 之前(1, 2)sorted当一元“键”相等时,该函数依赖于二元“键”。(澄清一下,某些元组的 1-ary 键t将是t[0]2-ary t[1]。) …

python sorting algorithm

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

使用数字处理字符串会导致Python中出现'ValueError:int()错误文字无效

所以基本上我们给出了一个如下所示的文本:

20
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 …
Run Code Online (Sandbox Code Playgroud)

python

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