我正在使用rails版本3.0.3和ruby版本1.9.2p136(2010-12-15)在Intel Core 2 Duo 2,6 Ghz上使用4 GB Ram和Windows Vista Business SP2而不运行其他(重型)应用程序.我已经读过Windows上的rails开发速度比Unices慢,大多数人都不建议这样做,但这很愚蠢.
我想不出使用4秒显示简单版本号的任何好理由.并且rails生成需要长达10秒才能完成!
我的设置中的某些东西一定是错的(至少我希望如此).
谁有个好主意如何进行?提前致谢!
我们已经编写了一个控制台应用程序(将用作服务),它启动了几个工作线程来处理通过mina传入的请求.当在特定网络端口上接收到停止信号时,应用程序离开主循环.这是停止服务的预期方式.这非常正常,但是当收到停止信号时,应用程序的过程不会立即终止(最多需要5分钟).我们通过日志消息验证主要功能是否按预期快速离开,并且应用程序创建的所有线程也被终止.但应用程序继续运行.
在离开main函数之前仍然运行的线程是:
Signal Dispatcher (java.lang.Thread)
Finalizer (java.lang.ref.Finalizer$FinalizerThread)
Abandoned connection cleanup thread (com.mysql.jdbc.AbandonedConnectionCleanupThread)
main (java.lang.Thread)
pool-2-thread-1 (java.lang.Thread)
Reference Handler (java.lang.ref.Reference$ReferenceHandler)
Run Code Online (Sandbox Code Playgroud)
我们目前使用以下java版本:
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
Run Code Online (Sandbox Code Playgroud)
操作系统是ubuntu 14.04 LTS.
我对此行为一无所知,我希望能提供一些有关如何进一步调查此问题的提示.
附加信息
我按照建议生成了一个Full thread dump.四个线程在等待:
"pool-2-thread-1" prio=10 tid=0x00007fd7fc51f000 nid=0x16200 waiting on condition [0x00007fd800318000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000000cceaf660> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:460)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:359)
at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:942)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) …Run Code Online (Sandbox Code Playgroud) 我开始使用stl容器,因为当我需要列表,设置和映射的功能并且在我的编程环境中没有其他任何可用时它们非常方便.我并不关心它背后的想法.STL文档很有意思到功能等等.然后我跳过了阅读并且只是使用了容器.
但是昨天,我的假期仍在放松,我只是尝试了一下,想要更多的方式.所以我使用了转换功能(我可以为我鼓掌一下,谢谢你).
从学术角度来看,它看起来很有趣,而且很有效.但困扰我的是,如果你加强了对这些函数的使用,你需要成千上万的帮助程序类来处理代码中你想要做的大部分事情.程序的整个逻辑被切成小块.这种切片不是良好的编码习惯的结果; 这只是技术需求.有些东西,这让我的生活变得更加艰难.
我学到了很难的方法,你应该总是选择最简单的方法来解决手头的问题.我无法看到,例如,for_each函数正在为我做什么,证明在几个简单的代码行中使用辅助类是合理的,这些代码位于一个普通的循环中,这样每个人都可以看到正在发生的事情.
我想知道,你在考虑我的担忧?当你开始以这种方式工作并且习惯了之后改变主意时,你有没有像我一样看到它?我忽略了哪些好处?或者你只是像我一样忽略这些东西(并且可能继续这样做).
谢谢.
PS:我知道在boost中有一个真正的for_each循环.但我在这里忽略它,因为它只是一个方便的方式,我猜通常使用迭代器循环.
当我在一个类中包含一些过程代码时(在我的情况下是c ++,但这可能不是我感兴趣的)我常常对最好的方法感到困惑.使用过程代码我的意思是你可以很容易地放入一个过程中,你使用周围的对象主要是为了清晰和易用(错误处理,日志记录,事务处理......).
例如,我想编写一些代码,从数据库中读取内容,对其进行一些计算并对数据库进行一些更改.为了能够这样做,它需要来自呼叫者的数据.
这些数据如何以最佳方式进入对象.我们假设它需要7个值和一个整数列表.
我的想法是:
第一种解决方案的优点是调用者必须准确地提供类所需的工作,并确保在创建类之后数据可用.然后可以将对象存储在某处,并且可以在没有任何与对象的进一步交互的情况下由调用者触发中心函数.
它在第二个例子中几乎相同,但现在中央功能必须检查调用者是否已传送所有必要的数据.问题是,如果您对每个数据的和平有一个单一的功能,或者如果您只有一个.
Last解决方案的唯一优势是,在执行之前不会存储数据.但是它看起来像一个正常的函数调用,并且类接近的好处消失了.
你怎么做那样的?我的考虑是否正确?我错过了一些优点/缺点?
这个东西很简单,但我找不到任何资源.
编辑:我不是在谈论数据库连接.我的意思是完成程序所需的所有数据.例如,簿记交易的所有信息.
让我们做一个民意调查,你更喜欢什么:
class WriteAdress {
WriteAdress(string name, string street, string city);
void Execute();
}
Run Code Online (Sandbox Code Playgroud)
要么
class WriteAdress {
void Execute(string name, string street, string city);
}
Run Code Online (Sandbox Code Playgroud)
要么
class WriteAdress {
void SetName(string Name);
void SetStreet(string Street);
void SetCity(string City);
void Execute();
}
Run Code Online (Sandbox Code Playgroud)
要么
class WriteAdress {
void SetData(string name, string street, string city);
void Execute();
}
Run Code Online (Sandbox Code Playgroud) 我正在玩铁轨,我发现了一些奇怪的东西.为了存储货币值,我使用典型的十进制数据类型,活动记录转换为BigDecimal.我认为这是精确的,我想避免浮点数学的奇怪行为.但是当我将99.99存储到数据库时,一切正常,但是当记录被活动记录加载时,它会失去精度并转换为99.9899999999之类的东西.这看起来像一个浮点问题.
我做了一些测试,发现像这样创建一个BigDecimal b = BigDecimal.new("99.99")导致一个"干净"的变量但是这样构建它b = BigDecimal.new(99.99)会导致"不洁"的版本我想避免.
我想,当从数据库加载记录时,ActiveRecord用一个中间浮点重建BigDecimal.这不是我想要的,我想知道是否可以避免.
Ruby版本1.9.3p0 Rails 3.2.9 Sqlite 3.7.9
我做了一个关于bash的小实验,甚至在阅读了高级bash脚本指南的相关部分之后,我无法解释我正在观察的内容.
测试情况:名为"test"的目录,其子目录为"target",有两个文件:"a b"和"c d"(名称包含空格).我想将文件移动到目标目录中,然后我将它变得更复杂,然后是必要的:
cp $(echo "'a b' 'c d'") target
Run Code Online (Sandbox Code Playgroud)
这给了我以下结果:
cp: Aufruf von stat für „'a“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für „b'“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für „'c“ nicht möglich: Datei oder Verzeichnis nicht gefunden
cp: Aufruf von stat für „d'“ nicht möglich: Datei oder Verzeichnis nicht gefunden
Run Code Online (Sandbox Code Playgroud)
就好像有什么东西从内部echo命令的输出中删除单引号.但如果我这样做:
echo $(echo "'a b' 'c d'")
Run Code Online (Sandbox Code Playgroud)
结果是:
'a b' 'c d'
Run Code Online (Sandbox Code Playgroud)
一些bash大师可以指出我的文档让我明白吗?这将使我周五完成!
编辑:我意识到太晚了,不会被删除而是被忽略了.这对我来说更加困惑,也需要解释.