我正在设计一个简单的基于Web的应用程序.我是这个基于Web的域的新手.我需要您对设计模式的建议,例如如何在Servlet中分配责任,制作新Servlet的标准等.
实际上,我的主页上有很少的实体,并且每个实体都对应于我们添加,编辑和删除等几个选项.之前我每个选项使用一个Servlet,比如Servlet1,用于添加entity1,Servlet2用于编辑entity1等等,这样我们最终得到了大量的servlet.
现在我们正在改变我们的设计.我的问题是你如何选择如何选择servlet的责任.我们是否应该为每个实体安装一个Servlet,它将处理所有选项并将请求转发给服务层.或者我们应该为整个页面都有一个servlet来处理整个页面请求,然后将其转发到相应的服务层?此外,请求对象是否应转发到服务层.
这个说法:
if('z' - 'a' == 25)
Run Code Online (Sandbox Code Playgroud)
不保证以同样的方式评估.它取决于编译器.此外,不保证以与此相同的方式进行评估:
#if 'z' - 'a' == 25
Run Code Online (Sandbox Code Playgroud)
即使预处理器和编译器都在同一台机器上运行.这是为什么?
我知道诸如x = x++ + ++x调用未定义行为之类的事情,因为变量在同一序列点内被多次修改。这在这篇文章中进行了彻底的解释为什么这些构造使用前增量和后增量未定义行为?
但是考虑像printf("foo") + printf("bar"). 该函数printf返回一个int,因此该表达式在这个意义上是有效的。但是+标准中没有规定运算符的求值顺序,所以不清楚这会打印foobar还是barfoo。
但我的问题是这是否也是未定义的行为。
一个朋友和我对单个函数进行了大讨论,函数本身没有任何意义,但在我看来是错误的。
函数如下:
//get tomorrows date
int getTomorrowsDate(){
sleep(1*60*60*24);
return getCurrentDate();
}
Run Code Online (Sandbox Code Playgroud)
如果我执行函数并得到结果,那已经是错误的了,因为明天已经到了今天。
经过长时间的讨论,我的朋友认为函数在执行时间是正确的,而我则相反,并说函数在结果时间是正确的。请有人向我详细说明为什么我的观点是错误的,因为我不明白。
x = 1;
std::cout << ((++x)+(++x)+(++x));
Run Code Online (Sandbox Code Playgroud)
我希望输出是11,但实际上12.为什么?
int eq3(int a, int b, int c, int d, int e, int f){
return a == d || a == e || a == f
|| b == d || b == e || b == f
|| c == d || c == e || c == f;
}
Run Code Online (Sandbox Code Playgroud)
如果3个第一个int中的任何一个等于3个最后一个int中的任何一个,则此函数接收6个int并返回true.是否有任何类似的方式使其更快?
因为在 C 中必须在定义数组时声明数组长度,所以使用第一个元素作为长度是否可以接受,例如
int arr[9]={9,0,1,2,3,4,5,6,7};
Run Code Online (Sandbox Code Playgroud)
然后使用这样的函数来处理数组:
int printarr(int *ARR) {
for (int i=1; i<ARR[0]; i++) {
printf("%d ", ARR[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
我看不出这有什么问题,但更愿意先咨询有经验的 C 程序员。我将是唯一一个使用代码的人。
我遇到了这段代码:
char str[600];
scanf("%s", &str);
Run Code Online (Sandbox Code Playgroud)
当然,这会发出此警告:
a.c:6:17: warning: format specifies type 'char *' but the argument has type
'char (*)[600]' [-Wformat]
scanf("%s", &str);
~~ ^~~~~~~
Run Code Online (Sandbox Code Playgroud)
我知道正确的方法是删除&和键入scanf("%s", str).但它确实有效,所以我的问题是这是否会导致任何问题.是UB吗?当我切换str到指针而不是数组时(显然)不起作用.但是这会在使用数组时引起任何问题吗?
(我在这里讨论了一个答案,答案者不想改变他对正确方法的回答)
C语言中的大多数关键字(或与此相关的任何语言)都以字母开头。但是有些关键字以下划线开头吗?这些关键字是:_Alignas,_Alignof,_Atomic,_Bool,_Complex,_Generic,_Imaginary,_Noreturn,_Static_assert和_Thread_local。
我觉得这很奇怪。如果它是不是API真正组成部分的隐藏的全局常量或内部函数,我会理解的。但是这些都是关键词。
当C实际上有一个称为bool和的宏static_assert并且它们的实现使用关键字时,我感到特别奇怪。
给定一个由 n 个元素组成的随机排序数组 (arr),函数 partitionArray(int arr[], int n, int x) 将元素划分为两个子集,使得元素 <= x 在左侧子集中,元素 > x 在右侧子集。
测试用例的第一行将包含两个由空格分隔的数字 n(列表中的元素数)和 x(用于分区的数字)。下一行将包含 N 个空格分隔的整数。
对于某些情况,我从以下函数中得到了错误的输出。
这是我的代码:
void partitionArray(int arr[], int n, int x)
{
int i, j, temp;
i = 0;
j = n-1;
while (i < j)
{
while (arr[i] <=x)
i++;
while (arr[j] > x)
j--;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
Run Code Online (Sandbox Code Playgroud)
对于我得到正确输出的情况是:
10 6
28 26 25 5 6 7 24 29 …Run Code Online (Sandbox Code Playgroud)