有没有办法比较两个数字中哪个阶乘数更大而不计算?
场景是我正在创建ac#console应用程序,它需要两个因子输入
123!!!!!!
456!!!
Run Code Online (Sandbox Code Playgroud)
我想要做的就是比较哪个阶乘值大于其他因素,我所做的代码片段
try
{
string st = Console.ReadLine();
Int64 factCount = 0;
while (st.Contains('!'))
{
factCount = st.Where(w => w == '!').Count();
st = st.Replace('!', ' ');
};
decimal result = 1 ;
for (Int64 j = 0; j < factCount; j++)
{
UInt64 num = Convert.ToUInt64(st.Trim());
for (UInt64 x = num; x > 0; x--)
{
result = result * x;
}
}
if (factCount == 0)
{
result = Convert.ToUInt64(st.Trim());
}
string st2 = Console.ReadLine(); …Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关如何在EF中实现if-exists-insert-else-update语义的其他问题,但要么我不理解答案如何工作,要么他们实际上没有解决问题.提供的常见解决方案是将工作包装在事务范围内(例如:使用没有竞争条件的实体框架实现if-not-exists-insert):
using (var scope = new TransactionScope()) // default isolation level is serializable
using(var context = new MyEntities())
{
var user = context.Users.SingleOrDefault(u => u.Id == userId); // *
if (user != null)
{
// update the user
user.property = newProperty;
context.SaveChanges();
}
else
{
user = new User
{
// etc
};
context.Users.AddObject(user);
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但我没有看到它如何解决任何问题,因为这个工作,我上面已经加星号的行应该阻止第二个线程是否尝试访问相同的用户ID,仅在第一个线程完成其工作时解除阻塞.但是,使用事务不会导致这种情况,并且由于第二个线程尝试第二次创建同一用户时发生的密钥违规,我们将抛出一个UpdateException.
而不是捕捉由竞争条件引起的异常,最好是防止竞争条件首先发生.执行此操作的一种方法是使星号行在数据库行上取出与其条件匹配的独占锁,这意味着在此块的上下文中,一次只有一个线程可以与用户一起使用.
对于EF的用户来说,这似乎是一个常见的问题,所以我正在寻找一个可以随处使用的干净,通用的解决方案.
我真的很想避免使用存储过程来创建我的用户.
有任何想法吗?
编辑:我尝试使用相同的用户ID在两个不同的线程上同时执行上述代码,尽管取出了可序列化的事务,但它们都能够同时进入临界区(*).这导致在第二个线程尝试插入与第一个刚刚插入的用户ID相同的用户ID时抛出UpdateException.这是因为,正如下面Ladislav所指出的,可序列化事务只有在开始修改数据而不是读取数据之后才会进行独占锁定.
我有一堆gzip压缩文件,我想用Python的内置CSV阅读器打开检查.我想在没有先将它们手动解压缩到磁盘的情况下执行此操作.我想我想以某种方式获得未压缩数据的流,并将其传递给CSV阅读器.这在Python中可行吗?
在PHP中,我曾经在我的内容中定义了一些变量并在我的header.php所有页面中使用它们.我怎么能在Laravel中有这样的东西?
我不是在谈论 View::share('xx', 'xx' );
假设我想要一个包含数字的变量,我需要在我的所有控制器中使用这个数字来计算某些东西.
这适用于Chrome和支持HTML5中占位符文本的任何其他浏览器
<input id="name" name="name" type="text" placeholder="Please enter your name..." required /> <br />
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于3.5及更早版本的Firefox,显然是IE8,可能还有其他浏览器.
如何实现相同的功能(最好是在HTML/CSS中 - 如果不是我愿意接受建议),以支持所有旧版浏览器?如果不是每一个浏览器,至少Firefox和IE.
Safari和Chrome已经支持它(或者最新版本).
谢谢.
说我有以下网页:
<html>
<script>
document.write('querystring=' + location.search.substr(1));
</script>
<html>
Run Code Online (Sandbox Code Playgroud)
我在这样的URL打开它:
http://completely-secure-site/?<script>alert('fsecurity')</script>
Run Code Online (Sandbox Code Playgroud)
在所有尝试的浏览器(Chrome 57,Firefox 52和Safari 10)中,结果是:
查询字符串=%3Cscript%3Ealert(%27fsecurity%27)%3C /脚本%3E
因为尖括号<>是无效的URL字符,他们似乎得到自动的方式浏览器中编码,才可以拿到附近的JS运行时的任何地方.
这让我相信简单地在客户端上直接渲染查询字符串document.write总是安全的,而不是可能的XSS向量.(我意识到当然还有许多其他方式可以让应用程序容易受到攻击,但让我们坚持这里描述的精确案例.)
我在这个假设中是否正确?
与问题无关,但有趣的是一边.如果我首先解码URI,那么浏览器的行为是不同的:document.write(decodeURI(location.search.substr(1)));.Chrome和Safari中的XSS Auditor会阻止该页面,而Firefox会显示警报.
我正在我的应用程序中进行一些分页,使用PostgreSQL的标准OFFSET和LIMIT关键字一次从数据库返回20行.例如,要获取第1页页面:
SELECT stuff FROM table WHERE condition ORDER BY stuff OFFSET 0 LIMIT 20
Run Code Online (Sandbox Code Playgroud)
我们还向用户显示记录总数,这是应用程序的要求.所以,显然,我可以通过发出一个单独的查询来获得总数:
SELECT COUNT(*) FROM table WHERE condition
Run Code Online (Sandbox Code Playgroud)
但是如果存在大量行,那么这不是最佳解决方案.我注意到MySQL有一个非常有用的函数FOUND_ROWS(),它正是我正在寻找的:
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function%5Ffound-rows
PostgreSQL中有相同的东西吗?
.NET的Array.Sort()方法使用哪种排序算法?
我刚从MSDN(11.0.50727.1)安装了VS2012 Premium的RTM版本.我创建了一个C#ASP.NET MVC 4应用程序和一个C#控制台应用程序,但是它们都没有为我提供以下文件类型的语法高亮或Intellisense:
但是所有其他文件类型似乎都运行正常,包括:
我在Mac OSX Lion上运行Windows 7,在VMWare Fusion 5中进行虚拟化.我也在同一个虚拟机中安装了VS 2010,它已经运行良好.
我试过运行devenv.exe/setup但没有成功.
我尝试过工具>导入和导出设置>重置但没有成功.
任何人有任何想法如何使这工作?
之间有什么区别$injector.instantiate,$injector.get并且$injector.invoke在AngularJS?