小编Luu*_*lag的帖子

微观优化值得花时间吗?

我是一名PHP开发人员,我一直认为微优化不值得花时间.如果你真的需要额外的性能,你可以编写你的软件,使其在架构上更快,或者你编写一个C++扩展来处理慢速任务(或者更好的是,使用HipHop编译代码).然而,今天一位工作伙伴告诉我,这有很大的不同

is_array($array)
Run Code Online (Sandbox Code Playgroud)

$array === (array) $array
Run Code Online (Sandbox Code Playgroud)

而且我就像"呃,这真是一个毫无意义的比较",但他不同意我的看法......他是我们公司最好的开发人员,并且负责一个每天大约有5000万次SQL查询的网站 - - 例如.所以,我在这里想知道:他可能是错的还是微优化真的值得花时间和时间?

php optimization performance

37
推荐指数
4
解决办法
9729
查看次数

malloc()是否分配了一块连续的内存块?

我有一段由一位非常老的学校程序员编写的代码:-).它就是这样的

typedef struct ts_request
{ 
  ts_request_buffer_header_def header; 
  char                         package[1]; 
} ts_request_def; 

ts_request_def* request_buffer = 
malloc(sizeof(ts_request_def) + (2 * 1024 * 1024));
Run Code Online (Sandbox Code Playgroud)

程序员基本上正在研究缓冲区溢出概念.我知道代码看起来很狡猾.所以我的问题是:

  1. malloc总是分配连续的内存块吗?因为在这段代码中如果块不连续,代码将失败很长时间

  2. 执行free(request_buffer),它将释放malloc分配的所有字节,即sizeof(ts_request_def)+(2*1024*1024),或者只释放结构sizeof(ts_request_def)大小的字节

  3. 你是否看到这种方法有任何明显的问题,我需要与老板讨论这个问题,并想指出这种方法有任何漏洞

c malloc coding-style

35
推荐指数
6
解决办法
3万
查看次数

PDO try-catch在函数中的使用

我正考虑在未来的所有webapp中使用PDO.目前(使用我迄今为止从SO中学到的东西),我在我的网站中处理数据库连接的是一个Singleton类,如下所示:

class DB {

    private static $instance = NULL;
    private static $dsn      = "mysql:host=localhost;dbname=mydatabase;";
    private static $db_user  = 'root';
    private static $db_pass  = '0O0ooIl1';

    private function __construct() 
    {

    }
    private function __clone()
    {

    }   
    public static function getInstance() {

        if (!self::$instance)
        {           
            self::$instance = new PDO(self::$dsn, self::$db_user, self::$db_pass);
            self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        return self::$instance;
    }
}
Run Code Online (Sandbox Code Playgroud)

和另一个具有内容特定功能的文件(functions.php)看起来完全像这样:

function get_recent_activities ()
{    
    try
    {    
        $db = DB::getInstance();
        // --prepare and execute query here, fetch the result--
        return $my_list_of_recent_activities;
    }
    catch (PDOException …
Run Code Online (Sandbox Code Playgroud)

php pdo

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

私有帮助器方法与Java中的公共静态实用程序方法

我有一个变长的Java类.当我通过代码质量工具运行它时,我会被标记为类中的行数.

这是一个较低的层类,由上层使用Spring @Autowired.该类有许多非静态的私有实例方法.它们不使用任何实例字段,仅适用于方法参数.

我可以像public static在某个单独的实用程序类中一样安全地移动这些方 有什么缺点?

java spring static

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

高度可变域中的不可变功能对象

我正在利用Scala在业余时间学习函数式编程,我有一个闲置的新手问题.

在做像Haar小波变换这样的事情时,我可以看到具有不可变对象的优雅 - 即当数据本身由对象表示时不会改变.

但我看到一个博客,其中有人以小游戏为例证明了不变性.如果一个生物对象收到了伤害,它没有改变它的状态 - 它返回了一个新的生物对象,其中包含新的生命值和一个新的"aggro to X"标志.但是,如果我们设计像MMORPG这样的东西,魔兽世界说.战场上的一百名玩家......可能有成千上万的攻击和缓冲/减益效果以不同的方式影响他们.是否仍然可以使用完全不可变的对象来设计系统?对我来说,似乎每个'滴答'会有一大群新的实例.为了获得当前有效的对象实例,所有客户端都会不断地经历某种中心"游戏世界"对象,或者?

函数式编程是否适用于此,或者这是"最佳工作的最佳工具,可能在这里不可变"的情况?

functional-programming immutability

25
推荐指数
2
解决办法
2184
查看次数

numpy数组连接:"ValueError:所有输入数组必须具有相同的维数"

如何连接这些numpy数组?

首先np.array是一个形状(5,4)

[[  6487    400 489580      0]
 [  6488    401 492994      0]
 [  6491    408 489247      0]
 [  6491    408 489247      0]
 [  6492    402 499013      0]]
Run Code Online (Sandbox Code Playgroud)

第二个np.array有形状(1,5)

[  16.   15.   12.  12.  17. ]
Run Code Online (Sandbox Code Playgroud)

最后的结果应该是

[[  6487    400    489580    0   16]
 [  6488    401    492994    0   15]
 [  6491    408    489247    0   12]
 [  6491    408    489247    0   12]
 [  6492    402    499013    0   17]]
Run Code Online (Sandbox Code Playgroud)

我试过np.concatenate([array1, array2]) 但是我得到了这个错误

ValueError: all …

python numpy

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

使用GenMatch中的标准偏差来鼓励更多对

因此,请遵循匹配包中的示例,特别是GenMatch示例.这是从前一个问题继续

链接到R包这里

按照中的例子 GenMatch

library(Matching)
data(lalonde)
attach(lalonde)

X = cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74)

BalanceMat <- cbind(age, educ, black, hisp, married, nodegr, u74, u75, re75, re74,
                    I(re74*re75))

genout <- GenMatch(Tr=treat, X=X, BalanceMatrix=BalanceMat, estimand="ATE", M=1,
                   pop.size=16, max.generations=10, wait.generations=1)

genout$matches
genout$ecaliper

Y=re78/1000

mout <- Match(Y=Y, Tr=treat, X=X, Weight.matrix=genout)
summary(mout)
Run Code Online (Sandbox Code Playgroud)

我们看到185个治疗观察与270个非治疗观察配对.

我们可以通过以下方式生成一个表格,其中包含左侧的治疗病例及其年龄,以及右侧的对照病例和年龄:

pairs <- data.frame(mout$index.treated, lalonde$age[mout$index.treated], mout$index.control, lalonde$age[mout$index.control])
Run Code Online (Sandbox Code Playgroud)

现在,关于Weight.Matrix生成的文献GenMatch是非常神秘的,并没有解释这些值代表什么.我在这里有一个未解决的问题.现在假设我们想要放宽匹配,以便在年龄标准上进行更灵活的配对.

我们看到这sd(lalonde$age)为我们的数据提供了7年的SD.

所以我想要Weight.matrix解释这一点.我想对age变量使用1 SD的限制,因此返回比原始185-270更多的对.

我的猜测是生成第二个GenMatch函数,然后继续我的代码.所以我使用: …

r match matching standard-deviation

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

替换linearLayout权重机制

背景:

  • 由于性能原因,Google建议避免使用嵌套加权linearLayouts.
  • 使用嵌套加权linearLayout很难读,写和维护.
  • 对于放置可用大小百分比的视图,仍然没有其他好的选择.只有解决方案才是权重并使用OpenGL.甚至没有类似WPF/Silverlight上显示的"viewBox"来自动缩放内容.

这就是为什么我决定创建我自己的布局,你要告诉每个孩子他们的重量(和周围的重量)与它的大小相比应该是什么.

看来我已经成功了,但出于某种原因,我认为有一些我无法追查的错误.

其中一个错误就是textView,即使我为它提供了大量空间,它也会将文本放在顶部而不是放在中心.另一方面,imageViews工作得很好.另一个错误是,如果我在自定义布局中使用布局(例如frameLayout),则其中的视图将不会显示(但布局本身将会显示).

请帮我弄清楚它为什么会发生.

如何使用:而不是线性布局的下一个用法(我故意使用长XML,以显示我的解决方案如何缩短事物):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  android:layout_height="match_parent" android:orientation="vertical">

  <View android:layout_width="wrap_content" android:layout_height="0px"
    android:layout_weight="1" />

  <LinearLayout android:layout_width="match_parent"
    android:layout_height="0px" android:layout_weight="1"
    android:orientation="horizontal">

    <View android:layout_width="0px" android:layout_height="wrap_content"
      android:layout_weight="1" />

    <TextView android:layout_width="0px" android:layout_weight="1"
      android:layout_height="match_parent" android:text="@string/hello_world"
      android:background="#ffff0000" android:gravity="center"
      android:textSize="20dp" android:textColor="#ff000000" />

    <View android:layout_width="0px" android:layout_height="wrap_content"
      android:layout_weight="1" />

  </LinearLayout>
  <View android:layout_width="wrap_content" android:layout_height="0px"
    android:layout_weight="1" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我所做的只是(x是将视图本身放在权重列表中的位置):

<com.example.weightedlayouttest.WeightedLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res/com.example.weightedlayouttest"
  xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  android:layout_height="match_parent" tools:context=".MainActivity">

  <TextView android:layout_width="0px" android:layout_height="0px"
    app:horizontalWeights="1,1x,1" app:verticalWeights="1,1x,1"
    android:text="@string/hello_world" android:background="#ffff0000"
    android:gravity="center" android:textSize="20dp" android:textColor="#ff000000" />

</com.example.weightedlayouttest.WeightedLayout>
Run Code Online (Sandbox Code Playgroud)

我的特殊布局代码是:

public class WeightedLayout extends ViewGroup
  {
  @Override …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-linearlayout android-layout-weight android-percent-library

18
推荐指数
2
解决办法
2191
查看次数

如何解决悬空的 const ref

以下短节目

#include <vector>
#include <iostream>

std::vector<int> someNums()
{
    return {3, 5, 7, 11};
}

class Woop
{
public:
    Woop(const std::vector<int>& nums) : numbers(nums) {}
    void report()
    {
        for (int i : numbers)
            std::cout << i << ' ';
        std::cout << '\n';
    }
private:
    const std::vector<int>& numbers;
};

int main()
{
    Woop woop(someNums());
    woop.report();
}
Run Code Online (Sandbox Code Playgroud)

有一个悬空引用问题,似乎没有编译器警告过。问题是临时文件可以绑定到 const-refs,然后您可以保留它。那么问题是;有没有办法避免陷入这个问题?最好是不涉及牺牲常量正确性或总是制作大对象的副本。

c++

18
推荐指数
2
解决办法
986
查看次数

MATLAB中的加权随机数

如何从向量中随机选取N个数字,a并为每个数字分配权重?

让我们说:

a = 1:3; % possible numbers
weight = [0.3 0.1 0.2]; % corresponding weights
Run Code Online (Sandbox Code Playgroud)

在这种情况下,拾取1的概率应该比拾取2的概率高3倍.

所有权重的总和可以是任何东西.

random matlab

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