我有一个类似于boost :: any的类,因为它是一个模板化的容器类.我想有一个方法将包含的值写入字符串.但是,如果包含的类型不提供流插入操作符,我希望我的方法返回一些默认的tring而不是无法编译.下面就像我来的那样接近,并且应该清楚我要做的事情:
namespace W {
namespace hide {
template <typename T>
std::ostream& operator<<(std::ostream& out, const T& t) {
return std::operator<<(out, typeid(T).name());
}
}
template <typename T> struct C {
T t_;
std::string ToString() const {
using namespace hide;
std::ostringstream oss;
oss << t_;
return oss.str();
}
};
}
Run Code Online (Sandbox Code Playgroud)
这很有效,但有一些警告.例如,如果我想为一个类实际提供一个重载的插入运算符,那么该运算符必须与该类位于同一名称空间中,或者它必须位于W名称空间中才能被考虑.
它也有任何已经有非成员std :: operator <<的类型的问题,例如char和std :: string.如果T是这些类型之一,则oss << t_上面的行变得模糊不清.这可以通过在W名称空间内为这些类型添加重载来解决,例如:
std::ostream& operator << (std::ostream& out, const std::string& s) {
return std::operator <<(out, s);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有人找到比这更好的方法?为什么我必须为std :: string之类的东西添加自己的重载?这是根据标准支持的,还是我利用非标准行为?(我正在使用g ++ 4.3.3进行测试)
我想在java中比较不同模式的URI字符串,我想要尽可能快的代码.
我应该使用:
if(uri.contains("/br/fab") || uri.contains("/br/err") || uri.contains("/br/sts")
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
if(uri.matches(".*/br/(fab|err|sts).*"))
Run Code Online (Sandbox Code Playgroud)
请注意,我可以使用更多uri,并且经常调用此方法.
我的选择之间最好的答案是什么?
我们有一个Java Web应用程序,我们希望设置一些基本监控,以便将来扩展此监控.我们的计划如下:
(1)收集有关运行应用程序的Web容器的虚拟机的通用信息(例如内存和线程).
(2)监控应用程序的"状态".这是相当模糊的,但至少我们想看看Web应用程序是否还活着并且可以响应请求.
(3)将来我们希望收集更多特定于我们申请的信息.同样,这是相当模糊的,但您可以假设我们可能希望由支持人员可用的应用程序在内部收集某些统计信息.
通常,Web应用程序将部署在Tomcat 5.5或6环境中.在Web上快速搜索一下,可以为Tomcat启用JMX,然后可以使用JConsole连接到服务器.这为我们提供了许多解决要点(1)的基本信息.此外,"Catalina"的MBeans部分提供了一些信息,并且至少可以深入了解这一点,例如,查看特定servlet收到的请求数量.这不是我们想要的第(2)点,但至少给了我们一些信息.那里似乎有很多信息,但使用JConsole解释相当困难.也许有一个更好的工具来解释Tomcat暴露的MBean.
对于第(3)点,乍一看似乎我们可以编写自己的MBean,然后将它们提供给像JConsole这样的东西.就个人而言,这将涉及我学习JMX,我很乐意这样做,但我有一个问题.环顾四周后,我注意到这个主题的大部分教科书已经好几年没有更新,开源工具似乎在没有最新更新的情况下萎靡不振.所以我的主要问题很简单.您对JMX有何看法?它有未来还是被其他东西取代?鉴于我们已经拥有了我们的Web应用程序但是我们从头开始管理控制台,我们应该选择JMX还是更合适一些更好的未来呢?
我问这个问题没有个人斧头,我只是想听听你的意见和经验.我确信没有一个正确的答案,但我认为一个知情的讨论会很有用.
提前致谢,
亚当.
我正试图捕捉Android Market搜索意图.
这就是您启动Android Market并按包名搜索应用的方式:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:com.google.somepackage")));
Run Code Online (Sandbox Code Playgroud)
现在,这是我的一个活动的intent过滤器:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="market" android:host="search" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我希望Android能问我哪个应用应该处理不会发生的意图.
然而,如果我更换market与market1或search有search1,在这两个地方,我的活动被推出.
是否存在"不可触及"意图或某种意图?
TIA.
我的产品表中有一个 int字段,product_stat每次查看产品时都会增加.我还有一个名为的日期字段product_date_added.
为了计算产品每天的平均访问量,您需要使用当前日期和产品添加日期来计算产品存在的天数.然后将产品统计除以其存在的天数以获得每天的平均访问量.
好的但我想做的是选择一些产品并按每天的访问量排序 DESC
我怎样才能做到这一点?
谢谢!!!
我有一个包含数百万行的postgres数据库,它有一个名为geom的列,它包含一个属性的边界.
使用python脚本我从该表中提取信息并将其重新插入到新表中.
当我在新表中插入时,脚本会出现以下错误:
Traceback (most recent call last):
File "build_parcels.py", line 258, in <module>
main()
File "build_parcels.py", line 166, in main
update_cursor.executemany("insert into parcels (par_id, street_add, title_no, proprietors, au_name, ua_name, geom) VALUES (%s, %s, %s, %s, %s, %s, %s)", inserts)
psycopg2.IntegrityError: new row for relation "parcels" violates check constraint "enforce_geotype_geom"
Run Code Online (Sandbox Code Playgroud)
新表有一个检查约束enforce_geotype_geom =((geometrytype(geom)='POLYGON':: text)或(geom IS NULL))而旧表没有,所以我猜测theres dud数据或非多边形(也许是多边形数据) ?)在旧表中.我想将新数据保持为多边形,因此不想插入任何其他内容.
最初我尝试使用标准的python错误处理来包装查询,希望dud geom行会失败,但脚本会继续运行,但脚本已被写入最后提交而不是每行,所以它不起作用.
我认为我需要做的是遍历旧表geom行并检查它们是什么类型的几何体,这样我就可以确定是否要保留它或者在插入新表之前将其丢弃
什么是最好的解决方法?
简短的故事:我想将列表/字典转换为匿名对象
基本上我以前拥有的是:
var model = from item in IEnumerable<Item>
select new
{
name = item.Name
value = item.Value
}
Run Code Online (Sandbox Code Playgroud)
如果我有name, item.Name一个列表或字典,我怎么能去创建相同的匿名对象model?
编辑:澄清:
如果字典包含[name, item.Name]和[value, item.Value]作为键值对,我将如何创建,model而不假设你既不知道name也不知道value?
我有一个带有属性的基类,我想在派生类中隐藏它.除了使用反射之外,还有什么方法可以做到这一点吗?
[Authorize(Roles = "User,Admin,Customs")]
public abstract class ApplicationController : Controller
{
}
// hide the Authorize attribute
public class ErrorController : ApplicationController
{
}
Run Code Online (Sandbox Code Playgroud) 问题
我们需要在我们的java应用程序中防御'WAITFOR DELAY'sql注入攻击.
背景
[这很长.跳到'解决方案?' 以下部分,如果你匆忙]
我们的应用程序主要使用预准备语句和可调用语句(存储过程)来访问数据库.
在一些地方,我们动态构建并执行查询以供选择.在此范例中,我们使用条件对象根据用户输入条件构建查询.例如,如果用户为first_name和last_name指定了值,则查询结果总是如下所示:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier'
Run Code Online (Sandbox Code Playgroud)
(在这个例子中,用户会指定"joe"和"frazier"作为他/她的输入值.如果用户有更多或更少的批评,我们会有更长或更短的查询.我们发现这种方法比使用准备更容易声明,比存储过程更快/更高效.
攻击
漏洞审计报告了sql注入失败.攻击者为'last_name'参数注入'frazier WAITFOR DELAY '00:00:20'值,导致这个sql:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20'
Run Code Online (Sandbox Code Playgroud)
结果:查询成功执行,但执行时间为20秒.攻击者可以占用数据库池中的所有数据库连接,并有效地关闭您的站点.
关于这种'WAITFOR DELAY'攻击的一些观察
我曾经想过,因为我们使用了Statement executeQuery(String),所以我们可以安全地从sql注入.executeQuery(String)不会执行DML或DDL(删除或删除).并且在分号上执行Query(String)choke,因此'Bobby Tables'范例将失败(即用户输入'frazier; DROP TABLE成员'作为参数.参见http://xkcd.com/327/)
"WAITFOR"攻击在一个重要方面有所不同:WAITFOR修改现有的"SELECT"命令,而不是单独的命令.
攻击仅适用于生成的查询中的"最后一个参数".即'WAITFOR'必须出现在sql语句的最后
解决方案,廉价黑客还是两者
最明显的解决方案是简单地将"AND 1 = 1"添加到where子句中.
生成的sql立即失败并阻止攻击者:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20' AND 1=1
Run Code Online (Sandbox Code Playgroud)
问题
c# ×2
java ×2
android ×1
asp.net-mvc ×1
c++ ×1
dictionary ×1
html ×1
iostream ×1
javascript ×1
jdbc ×1
jmx ×1
list ×1
monitoring ×1
mysql ×1
overloading ×1
postgis ×1
postgresql ×1
python ×1
regex ×1
sql ×1
sql-order-by ×1
sql-server ×1
templates ×1
tomcat ×1