OMG_By

沉心、静气、学习、总结、进步


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

ActionContext

发表于 2017-10-21 | 分类于 框架

ActionContext

  ActionContext是Action的上下文,Struct2自动在其中保存了一些在Action执行过程中所需的对象,比如session、parameters、locale等。Struts2会根据每个执行HTTp请求的线程来创建对应的ActionContext,即一个线程只有一个唯一的ActionContext。因此,使用者可以使用静态方法ActionContext.getContext()来获取当前线程的ActionContext,也正是由于这个原因,使用者不用去操心让Action是线程安全的。

  无论如何,ActionContext都是用来存放数据的。Struts2本身会在其中放入不少数据,而使用者也可以放入自己想要的数据。ActionContext本身的数据结构是映射结构,即一个Map,用key来映射value。所以使用者完全可以像使用Map一样来使用它,或者直接使用Action.getContextMap()方法来对Map进行操作。

  Struts2本身在其中放入的数据有Actionlnvocation、application(即ServletContext)、conversionErrors、Locale、action的name、request的参数、HTTP的Session以及值栈等。完整的列表请参考它的Javadoc。

  由于ActionContext的线程唯一和静态方法就能获得的特性,使得在非Action类中可以直接获得它,而不需要等待Action传入或注入。需要注意的是,它仅在由于request而创建的线程中有效(因为request时才创建对应的ActionContext),而在服务器启动的线程中(比如fliter的init方法)无效。由于在非Action类中访问其的方便性,ActionContext也可以用来在非Action类中向JSP传递数据(因为JSP也能很方便的访问它)。

阅读全文 »

static

发表于 2017-10-18 | 分类于 C++基础知识

static的作用:

不考虑类

第一个作用:隐藏

  当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

  如果加了static,就会对其他源文件隐藏,利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。


  • static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用
    阅读全文 »

软件

发表于 2017-10-18 | 分类于 软件

各种杂七杂八的软件:

  • Windows FX
  • Myeclipse
  • Kali系统
  • JDK压缩包
  • zookeeper
  • tomcat

虚函数

发表于 2017-10-18 | 分类于 C++基础知识

引入原因:为了方便使用多态特性,我们常常需要在基类中定于虚函数。

关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。

虚函数表

阅读全文 »

深复制和浅复制

发表于 2017-10-18 | 分类于 C++基础知识

浅复制:被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。

举例:

1
2
3
4
5
6
7
8
9
10
struct Test{
char *ptr;
};
void shallow_copy(Test & src,Test & dest){
dest.ptr = src.ptr;
}
void deep_copy(Test & src,Test & dest){
dest.ptr=malloc(strlen(src.ptr)+1);
memcpy(dest.ptr,src.ptr);
}

浅复制可能会导致运行时错误,特别是在对象的创建和删除过程中。

内存泄露和缓冲区溢出

发表于 2017-10-18 | 分类于 C++基础知识

什么是内存泄露?

  • 一般我们常说的内存泄露是指堆内存的泄露。堆内存是指程序从堆中分配的,大小任意的内存块,使用完后必须显示释放的内存。应用程序一般使用malloc、realloc、new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能再被使用,我们就说这块内存泄露了。

什么是缓冲区溢出?

  • 缓冲区溢出是指向缓冲区内填充数据位数超过了缓冲区本身的容量限制,导致溢出的数据覆盖在合法数据上的情况。理想的情况是程序检查数据长度并不允许输出超出缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的存储空间相匹配,这九尾缓冲区溢出埋下了隐患。

SpringMVC工作流程

发表于 2017-10-18 | 分类于 框架

阅读全文 »

Java的四种线程池

发表于 2017-10-17 | 分类于 Java

Java通过Executors提供了四种线程池:

  • newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
    阅读全文 »

51nod1269 B君的圆锥

发表于 2016-05-27 | 分类于 acm

1629 B君的圆锥
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
收藏
关注
B君要用一个表面积为S的圆锥将白山云包起来。

B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。

注意圆锥的表面积包括底面和侧面。
Input
一行一个整数,表示表面积S。(1 <= S <= 10^9)
Output
一行一个实数,表示体积。
Input示例
8
Output示例
1.504506
wwwwodddd (题目提供者)
拿到这道题的第一想法就是写出面积体积关系,然后再找关系。
大神们说这道题的标准做法是用三分法~可以作为渣渣的我并不会—-以后学了再来补上。
不过群巨给了另一种数学建模的思想:
   要达成面积/体积最佳比,则模型样式是一致的。可以按比例缩放的。以放大2倍为例:
   R=r2
   S=S底+S侧=2^2
s底+2^2s底=2^2s
   V=1/3
S底H=1/32^2s底2h=2^3v
~简直奇妙~~又让渣渣我学到一招~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
double pow(double n){
return sqrt(n*n*n);
}
int main(){
int s;
while(~scanf("%d",&s)){
double v;
v = (double)1.504506*pow(s/8.0);
printf("%lf\n",v);
}
}

51nod 1021 石头归并

发表于 2016-05-16 | 分类于 acm

1021 石子归并
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
收藏
关注
N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。

例如: 1 2 3 4,有不少合并方法
1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)
1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)
1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)

括号里面为总代价可以看出,第一种方法的代价最低,现在给出n堆石子的数量,计算最小合并代价。

Input
第1行:N(2 <= N <= 100)
第2 - N + 1:N堆石子的数量(1 <= A[i] <= 10000)
Output
输出最小合并代价
Input示例
4
1
2
3
4
Output示例
19
这道题初一看很容易往贪心方向想,后来看了提示才知道是dp,可是并不知道怎么dp。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int INF = 1 << 30;
int sum[1005];
int vis[1005];
int dp[1005][1005];
int main(){
int n;
while(~scanf("%d",&n)){
int i,len,temp;
memset(vis,0,sizeof(vis));
memset(sum,0,sizeof(sum));
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++){
scanf("%d",&vis[i]);
sum[i]=sum[i-1]+vis[i];
}
for(len=1;len<n;len++){
for(i=1;i+len<=n;i++){
dp[i][i + len] = INF;
temp=sum[i+len]-sum[i-1];
for(int k=i;k<i+len;k++)
dp[i][i+len]=min(dp[i][i+len],dp[i][k]+dp[k+1][i+len]+temp);
}
}
printf("%d\n",dp[1][n]);
}
}

1…101112…14
OMG_By

OMG_By

133 日志
20 分类
36 标签
RSS
GitHub E-Mail
友链
  • 戎码人生
  • JosemyQAQ
  • Just do it !
  • ACM各大OJ题集
  • django大神博客
© 2020 OMG_By