小编Jim*_*Jim的帖子

试图了解同步队列的机制

我试图阅读同步队列的实现
对我来说并不是那么简单.它似乎使用链接列表,其中每个节点都与一个线程相关联.
核心部分使用旋转循环等待将任务放入队列中.
我想知道为什么使用旋转循环代替类似的东西wait/notify
现在,由于这个恒定的自旋循环,其中一个核心消失了,对吧?
我试图理解这一点,并粗略地了解同步队列的设计

更新令
我不安的是服务员线程如何启动/停止.

java concurrency multithreading nonblocking java.util.concurrent

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

如何在bash中使用perl one liner?

我正在研究如何根据每个句子的长度对文件进行排序,我从这个答案中看到了这个片段

perl -ne 'push @a, $_ } { print sort { length $a <=> length $b } @a' input
                      ^ ^  
Run Code Online (Sandbox Code Playgroud)

我测试了它并且它有效,但我不知道它是如何工作的!据我所知,语法错误.它有一个开放的右支架和一个我已标记的非封闭右支架.
我真的很难弄清楚如何在bash中运行这样的perl命令
可以请一些人解释这个片段吗?

linux bash perl

5
推荐指数
3
解决办法
717
查看次数

memcached是如何更新的?

我以前从未使用过 memcached,并且对以下基本问题感到困惑。
Memcached 是缓存吧?我假设我们缓存数据库中的数据以便更快地访问。那么当DB更新时谁负责更新缓存呢?我们的代码是,当数据库更新时,memcached 是否“理解”?

memcached caching

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

对可为空的列进行 LEFT JOIN。行为是什么?

我不清楚如果您尝试 JOIN 可能为 NULL 的列,那么 LEFT JOIN 的行为是什么。
例如

SELECT columns  
FROM  
EmployeePayment ep JOIN EmployeePaymentGroup g ON g.group_id = ep.group_id  AND g.subsidiary_id = ep.subsidiary_id  
LEFT JOIN EmployeeSalaryDetails esd USING (department_id)    
LEFT JOIN Employee e ON e.id = esd.emp_id
Run Code Online (Sandbox Code Playgroud)

如果EmployeePayment 和 EmployeePaymentGroup 的 INNER JOIN 返回 1 条记录,然后EmployeeSalaryDetails 上的第二个 LEFT JOIN 保留该记录,但该记录具有 esd.emp_id 的 NULL 值,并尝试在该 NULL 值上对 Employee 进行 LEFT JOIN,会发生什么情况。
我知道 NULL 很棘手,所以我想知道 LEFT JOIN 如何处理 NULL

注意:
我之前提出了一个关于 JOIN 的问题,但是 Abhik Chakraborty 的评论让我意识到条件中的 …

mysql sql join relational-algebra left-join

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

当某些类的接口方法的实现相同时,您如何处理?

假设我已经使用方法foo和bar定义了接口ISomeInterface.
例如

public interface ISomeInterface {  
    public void foo();  
    public void bar();  
} 
Run Code Online (Sandbox Code Playgroud)

假设我有类A和B,对它们来说,实现接口是有意义的.但是对于不同的实现也没有意义foo().
考虑到从A中从B或B导出A是不正确的/奇怪的是这个设计有标准的编码实践吗?
我假设我可以创建一些实用程序类来实现foo()并将其称为委托但我想知道是否可以以不同的方式处理整个结构

更新:
为了充分理解我的问题,我偶然发现了这个问题:http://perlbuzz.com/2010/07/why-roles-in-perl-are-awesome.html我试图了解这个功能是否是缺乏传统的OO概念,因为我们在Java中使用它们

java oop design-patterns interface class

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

为什么sprintf以5.555和0.555的小数部分不同?

有人可以解释为什么这里的行为存在差异吗?

perl -E 'say sprintf("%.2f",5.555);'
5.55    

perl -E 'say sprintf("%.2f",0.555);'
0.56  
Run Code Online (Sandbox Code Playgroud)

sprintf()如果以下数字是5或更大,我已经阅读了这些数据.那么为什么在第二种情况下它不能达到0.56呢?

floating-point perl printf rounding

5
推荐指数
2
解决办法
451
查看次数

Volley DeliverResponse 未被调用

我正在使用 Volley,我看到 parseNetworkResponse\n 被调用,一切正常。解析很好,我可以在日志中看到\n并且我不\xe2\x80\x99t 返回 null。\n但是由于某种原因,deliverResponse 没有被调用?\n如何解释为什么会发生这种情况或者我如何调试它?

\n\n

甚至这个:

\n\n
@Override\n        protected Response<Object> parseNetworkResponse(NetworkResponse response) {\n            Log.i(\xe2\x80\x9cTEST\xe2\x80\x9d, "Returning nothing from dummy parseNetworkResponse....");\n            Response<Object> jsonResponse = Response.success(new Object(), HttpHeaderParser.parseCacheHeaders(response));\n            Log.i("TEST", "Returning nothing....");\n            return jsonResponse;\n        } \n
Run Code Online (Sandbox Code Playgroud)\n\n

尽管我可以在 LOGCAT 中看到日志,但最终并没有调用 DeliverResponse

\n\n

更新:
\n我通过了调试器,最终在 NetworkDispatcher 中的代码中(在网络解析完成和后响应之后)\nrequest.markDelivered();\nmDelivery.postResponse(request, response);\n然后是代码在 ExecutorDelivery.postResponse 中执行:

\n\n
mResponsePoster.execute(new ResponseDeliveryRunnable(request, response, runnable));\n
Run Code Online (Sandbox Code Playgroud)\n\n

这最终会调用 mRequest.deliverResponse(mResponse.result);\n但是当我在 ResponseDeliveryRunnable.run 中添加断点时,代码不会中断,因此我假设调用 DeliverResponse 的可运行程序没有运行。
\n知道为什么会发生这种情况吗?

\n

java android android-studio android-volley

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

一长串if/else/execute代码分支的最佳设计模式/方法

我有一个"遗留"代码,我想重构.
代码基本上是对服务器的远程调用并获得回复.然后根据回复执行相应的.
代码骨架示例:

public Object processResponse(String responseType, Object response) {
    if(responseType.equals(CLIENT_REGISTERED)) {  
       //code  
       //code ...
    }  
    else if (responseType.equals(CLIENT_ABORTED)) {
       //code  
       //code....
    }    
    else if (responseType.equals(DATA_SPLIT)) {
      //code
      //code... 
   }  
   etc  
Run Code Online (Sandbox Code Playgroud)

问题是有许多if/else分支,并且每个内部的代码都不是微不足道的.
因此很难维护.
我想知道这个最好的模式是什么?
我有一个想法是创建一个方法名称与responseType相同的单个对象,然后在processResponse内部使用反射调用与responseType同名的方法.
这将清理processResponse,但它会将代码移动到具有许多/多种方法的单个对象,我认为反射会导致性能问题.
是否有一个很好的设计方法/模式来清理它?

java oop refactoring design-patterns

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

尝试从本地文件安装 apk 时未发现活动错误

我制作了一个应用程序,我从内部服务器下载 APK,将其保存在本地并希望提示用户安装它。
我的代码如下:

protected void onPostExecute(String path) {
    Intent promptInstall = new Intent(Intent.ACTION_VIEW);
    promptInstall.setDataAndType(Uri.parse(path), "application/vnd.android.package-archive");
    promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)

该路径包含 APK 文件,因此下载没有问题,但在尝试启动活动时,我得到:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/storage/sdcard/download/internalLocalApplication.apk typ=application/vnd.android.package-archive flg=0x10000000 }
     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1765)
     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1602)
     at android.app.Activity.startActivityFromFragment(Activity.java:4340)
     at android.app.Activity.startActivityFromFragment(Activity.java:4312)
     at android.app.Fragment.startActivity(Fragment.java:1075)
     at android.app.Fragment.startActivity(Fragment.java:1054)
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

更新:
似乎如果我按如下方式更改代码,它会起作用!好像Uri有问题?

@Override
protected void onPostExecute(String path) {
    Uri fileLoc = Uri.fromFile(new File(path));
    Intent promptInstall = new Intent(Intent.ACTION_VIEW);
    promptInstall.setDataAndType(fileLoc, "application/vnd.android.package-archive");
    promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(promptInstall);
}
Run Code Online (Sandbox Code Playgroud)

installation android android-activity

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

null对象有多少字节?

当我们有一个引用变量时,例如为了简化它,Integer i我们可以假设大小i约为16字节开销+ 4字节,实际的int + 4字节填充,即24字节.
所以我的问题是,如果i为null,我们只有4个字节的引用没有指向任何地方,或者是否有任何其他额外的"隐藏"信息添加到此?

java memory byte object

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