小编Vic*_*tor的帖子

JavaScript数组rotate()

我想知道旋转JavaScript数组的最有效方法是什么.

我想出了这个解决方案,其中正向n旋转数组向右旋转,负向左旋转n(-length < n < length):

Array.prototype.rotateRight = function( n ) {
  this.unshift( this.splice( n, this.length ) )
}
Run Code Online (Sandbox Code Playgroud)

然后可以这样使用:

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
months.rotate( new Date().getMonth() )
Run Code Online (Sandbox Code Playgroud)

我上面的原始版本有一个缺陷,正如Christoph在下面的评论中指出的那样,正确的版本是(额外的返回允许链接):

Array.prototype.rotateRight = function( n ) {
  this.unshift.apply( this, this.splice( n, this.length ) )
  return this;
}
Run Code Online (Sandbox Code Playgroud)

是否有更紧凑和/或更快的解决方案,可能在JavaScript框架的上下文中?(以下提出的版本都没有更紧凑或更快)

是否有任何JavaScript框架,内置数组旋转?(还没有人回答)

javascript arrays rotation

65
推荐指数
8
解决办法
6万
查看次数

DDD中的DAO,存储库和服务

在阅读了几篇文章后,我开始理解DAO和存储库之间的区别,但我发现自己在试图理解存储库和服务之间的区别时遇到了麻烦.

对于短期而言,在OO范例中:

  • DAO:包含CRUD operations一个实体类的基本类的类.它具有获取或检索底层持久存储系统的必要代码.一般而言,除了retrieve使用标识符类型有效的方法之外,方法接收对象实体作为参数.

  • 存储库:在更高级别的抽象中......通常我读过的是一种放置代码来处理聚合对象(具有子对象的对象)的操作的地方.它使用DAOs从数据库中检索对象,最后它以域"业务"语言公开接口.(但同样,我认为使用ID的数据类型是非常有效的).示例:一个非常简单的addSomething地方something是父实例的子对象,其实例btw由存储库作为整体进行管理.

  • 服务:同样,它处于更高的抽象层次.从我不起眼的角度来看,它们是连接两个不共享父子关系的类的好地方,但与存储库一样(在抽象术语中).示例:transferCash两者之间的方法bank accounts.

所以,这是我的读物,但我在这里问上述想法是对还是不对.或者我应该如何思考.或者让我真正了解所有这些概念的不同之处.

一些来源:

dao domain-driven-design repository

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

关系所有者在双向关系中意味着什么?

我有一个简单的模型QuestionChoice对象.

  • 一个问题有很多选择(S).
  • 很多选择有一个问题

使用Hibernate有两种方法可以实现

实施一:业主方是选择

Question.java

@OneToMany (mappedBy="question")
private Set choices = new HashSet();
Run Code Online (Sandbox Code Playgroud)

Choice.java

@ManyToOne
@JoinColumn (name="QUESTION_ID")
private Question question;
Run Code Online (Sandbox Code Playgroud)

实施二:业主方是问题

Question.java

@OneToMany
@JoinColumn (name = "QUESTION_ID")
private Set choices = new HashSet();
Run Code Online (Sandbox Code Playgroud)

Choice.java

@ManyToOne
@JoinColumn (name="QUESTION_ID", updatable = false, insertable = false)
private Question question;
Run Code Online (Sandbox Code Playgroud)

这两个实现有什么区别?

hibernate

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

用Java实现多种泛型类型的抽象泛型方法

我会问一个非常简短的问题,并希望有人可以帮助我找到解决方案.它涉及java中的泛型方法,有两种泛型类型(一种用于返回类型,另一种用于正式的参数)以及如何实现它.我想我错过了图片中的一些东西让它工作.

问题是......

这是有效的:

public enum Getter
{
    BillItemsSize {
        @Override
        public Integer get (Object entity) {
            DesiredClass ref = (DesiredClass ) entity; // "Old time" cast
            // do things...
        }
    };

    public abstract <T,K> T get (K entity);        
}
Run Code Online (Sandbox Code Playgroud)

不起作用:

public enum Getter
{
    BillItemsSize {
        @Override
        public Integer get (DesiredClass entity) { // no cast at all
            // do things
        }
    };

    public abstract <T,K> T get (K entity);        
}
Run Code Online (Sandbox Code Playgroud)

java编译器叫我这样:

<anonymous datasource.db.Getter$1> is not …
Run Code Online (Sandbox Code Playgroud)

java generics parameters

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

使用 async/await 时调用堆栈的工作

使用 async/await 函数时调用堆栈的行为如何?


function resolveAfter2Seconds() { // taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}

const asyncFuntion=async()=>{
  const result = await resolveAfter2Seconds();
  console.info("asyncFuntion finish, result is: ", result);
}

const first = async()=>{
    await asyncFuntion();
    console.log('first completed');
        debugger;
}

const second = ()=>{
    console.log('second completed');
        debugger;
}

function main(){
    first();
    second();
}


main();

Run Code Online (Sandbox Code Playgroud)

在上面的代码中,当在 second() 中遇到第一个断点时,我可以看到调用堆栈包含 main() 和 second()。在 first() 的第二个断点期间,调用堆栈包含 main() 和 first()。

在第一个断点期间 first() 发生了什么。它被推到哪里去了?假设 asyncFunction() 需要一些时间才能完成。

有人请帮忙。

javascript event-loop promise ecmascript-6

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

复合对象的复数命名约定

问题是关于命名变量或标识符的正确方法,这些变量或标识符对两个或多个“事物”的集合进行分组。让我用例子和问题进一步解释一下......

  • 如果你有一个 id 的东西,你可以用标识符“id”来命名它
  • 如果你有一个约会的东西,你可以将其命名为“约会”作为标识符
  • 如果您有多个 id(例如,一个数组),您可以将其命名为“ids”
  • 如果您在一个数组下有多个约会,您可以将其命名为“约会”
  • 如果您有多个约会 ID,我该如何命名?
    • 约会 ID?
    • 约会 ID?

我不是以英语为母语的人。

naming naming-conventions non-english plural

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

在 Postgres 上使用两阶段提交

假设“db1”中有一个名为“t1”的表,“db2”中有一个名为“t2”的表,我需要在两个表上插入一条记录,否则会失败。

连接到 db1,我想我应该输入以下内容:

BEGIN;
PREPARE TRANSACTION 'pepe'; -- this says the manual that makes your transaction gets stored on disk, so what is the purpose if I can't use it from another database?)

insert into t1 (field) values ('a_value');

COMMIT PREPARED 'pepe'
Run Code Online (Sandbox Code Playgroud)

连接到db2,我猜:

BEGIN;
PREPARE TRANSACTION 'pepe'; -- this fails (the name of the transaction, what is the meaning, what is use for?)
 -- It complains about this "ERROR:  transaction identifier "pepe" is already in use"

insert into t2 (field) …
Run Code Online (Sandbox Code Playgroud)

postgresql two-phase-commit

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

是否有推荐的方法来定义切片集合的常见行为?

我想从社区中获得建议,以便做出最佳实践.请耐心等待,举例如下:

假设您使用半开间隔,即在启动时知道的内容.

例如

  • 可以HalfOpenInterval限制为一天.示例:您说"从下午1点开始"(直到当天结束).我们称之为ClockInterval
  • 可以HalfOpenInterval限制宇宙的存在.例如:你说"从1810年7月9日起我们宣布独立"(直到宇宙结束......假设).我们称之为Period

对于这两种类型的实体:你与他们的集合,所以你通常slices时钟时间在你的代码.

所以,现在问题来了:你必须找到一个给定的时间间隔封闭(func FindEnclosingHalfOpenInterval)用于这两个时钟和时间,于是你开始写代码...

好吧,我进入这个问题......我应该如何组织代码,以便只编写一次常见的函数.(func FindEnclosingHalfOpenInterval).

所以我进入这段代码:https://play.golang.org/p/Cy7fFaFzYJR

但我一直想知道是否有更好的方法来定义切片集合的常见行为.

请读者你应该意识到我需要为每种类型的切片做一个"逐个元素"的转换(我为每种类型的具体的HalfOpenInterval定义了一个切片类型).所以我想知道是否有任何方法可以让我引入新的类型,HalfOpenInterval而不必做一些调整,"自动"得到使用的能力func FindEnclosingHalfOpenInterval?也许我的富有基于java的头脑并不是在简单直接前进的世界中面对问题的正确方法.对于任何建议,我都听到了.

go slice

5
推荐指数
0
解决办法
197
查看次数

Java - 泛型 - Class"Class <?>"的显式转换和强制转换方法

为什么castClass<?>Class 上使用该方法会在编译时产生未经检查的警告?

如果你偷看了cast方法,你会发现这个代码:

public T cast(Object obj) 
{
    if (obj != null && !isInstance(obj))
        throw new ClassCastException(cannotCastMsg(obj));
    return (T) obj; // you can see there is a generic cast performed here
}
Run Code Online (Sandbox Code Playgroud)

如果我做一个通用演员,编译器抱怨说有unchecked warning.


其他背景资料

你可以找到的我如何到达书有效的Java 2版本中这个问题,第166页(的PDF)的例子.

作者写了这段代码

public <T> T getFavorite(Class<T> type) 
{
    return type.cast(favorites.get(type));
}
Run Code Online (Sandbox Code Playgroud)

VS

public <T> T getFavorite(Class<T> type) 
{
    return (T) (favorites.get(type));
}
Run Code Online (Sandbox Code Playgroud)

我只是没有得到差异,为什么编译器抱怨未经检查的警告.最后,两段代码都做了一个明确的演员(T) object,不是吗?

java generics casting effective-java

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

为什么hasNextInt()在这里返回false?

这是我第一次使用Java扫描文件.我正在尝试从一个文本文件中读取整数列表,对它们进行操作,然后将它们读取到另一个文件中.初始文件如下所示:

1234
9876
2345
Run Code Online (Sandbox Code Playgroud)

我正在使用while循环并使用hasNextInt进行读取(在运行程序并检查初始文本文件之后,我确定值已经存在),但是我将零输出到新文本文件,所以我假设hasNextInt ()返回false.可以肯定的是,我只是跳过扫描并使用for循环直接在每个ArrayList元素上操作,输出完全写入新文件.这是我的代码:

    try {
        File inFile = new File("input.txt");
        File outFile = new File("output.txt");

        FileWriter inWriter = new FileWriter(inFile);
        FileWriter outWriter = new FileWriter(outFile);
        Scanner inReader = new Scanner(inFile);

        numberArray.add(1234); //Adding numbers to an array that was previously initialized
        numberArray.add(9876);
        numberArray.add(2345);

        System.out.println("The raw numbers are:");

        for (int n : numberArray) {
            inWriter.write(n + "\r\n");
            System.out.println(n);
        }

        System.out.println("\nThe new numbers are:");

        while (inReader.hasNextInt()) {
            int newNumber = inReader.nextInt();
            int checkDigit = (newNumber / 7);
            int finalNumber = …
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

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

可以仅使用CSS以大写形式显示第一个字符而以小写形式显示其他字符

例如,像这样的字符串,位于HTML元素中:

  - One Tree 
  - one tree 
  - One tree 
  - one Tree
Run Code Online (Sandbox Code Playgroud)

应用样式后,它们应呈现为:

One tree
Run Code Online (Sandbox Code Playgroud)

PD:只使用CSS,没有javascript,也没有额外的处理.

css string

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