1. 自我介绍
您好,我叫XXX,是XXX计算机研三的学生。我在XXX计算机系已经学习了六年的时间,本科阶段学习成绩优异,直接报送了本校研究生,可以说我的计算机基础知识还是比较扎实的。 在研究生阶段,除了在学习方面依旧努力以外,先后参与了多个项目。这些项目让我收获很多,可以说这个阶段的经历是相当宝贵的,不止加强了编程知识及其他些知识,而且也让我明白了在项目中沟通的重要性。最值得一提的是最近的这个项目:XXX功能实现。这个项目是我参加的第一个比较大型而且负责的内容也比较核心的一个项目。从开始的设计,到最后的调试我都亲身参与了进来,可以说这个项目让我成长最多。
我想,经过了六年计算机的学习,以及这些项目的锻炼,我有信心能够胜任我申请的百度质量部的这份工作。
以上就是我的自我介绍,谢谢大家
2.百度进军移动搜索业务,先后与电信和联通签署了搜索战略合作协议,而谷歌最近也。。。请问百度的优势在哪里?
3.项目准备:
MAC层与应用层的接口定义;协调MAC层内部的接口
Socket网络编程
/* socket fucntion */
void *ReveiveFunc(void *p);
int SocketInit()
{
int rv = 0;
pthread_t thread_handle;
struct sockaddr_in servaddr;
uint32_t nmccPort;
g_nSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (g_nSocket <= 0)
{
return -1;
}
else
{
//printf("create socket successful...\n");
}
/* convert port string to int */
nmccPort = (g_tlvNMCCPort.Value[0])*256 + (g_tlvNMCCPort.Value[1]);
/* init servaddr */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(nmccPort);
printf("g_tlvNMCCIP.Value is: %s\n", g_tlvNMCCIP.Value);
rv = inet_pton(AF_INET, (const char *)g_tlvNMCCIP.Value, &servaddr.sin_addr);
//printf("@%d@",rv);
if (rv <= 0)
{
printf("ERROR -- inet_pton, error code: %d\n", rv);
return -1;
}
/* connect to server */
rv = connect(g_nSocket, (struct sockaddr *)&servaddr, sizeof(servaddr));
if (rv < 0)
{
printf("ERROR -- connect to server %s:%d, error code: %d\n", g_tlvNMCCIP.Value, nmccPort, rv);
return -1;
}
else
{
// printf("connect to server %s:%d successful...\n", g_tlvNMCCIP.Value, nmccPort);
}
/* creat a thread */
pthread_create(&thread_handle, NULL, ReveiveFunc, (void *)NULL);
return 0;
}
void *ReveiveFunc(void *p)
{
int recvLen;
uint8_t recvBuffer[MAX_STRING_LENGTH];
while(1)
{
/* receive data from server */
TMessage *msgData = new TMessage();
if (msgData)
{
//memset(recvBuffer, 0, sizeof(uint8_t)*MAX_STRING_LENGTH);
recvLen = read(g_nSocket, msgData->message, MAX_STRING_LENGTH);
if (recvLen <= 0)
{
// printf(" ******* receive error occured: %d************ \n", recvLen);
continue;
}
msgData->type = NMCC_API;
msgData->name = msgData->message[0];
msgData->length = recvLen;
//char strLog[MAX_STRING_LENGTH];
// sprintf(strLog, "receive message from NMCC");
// g_pPrintANDLog->PrintANDLog(DEBUG, strLog, recvLen, recvBuffer);
/* insert into message queue */
// memcpy(msgData->message, recvBuffer, recvLen);
//printf("prepare:%d ",msgData->name);
//for(int i=0;i
//{
// printf("%d ",msgData->message[i]);
//}
// enqueue
g_pMessageQueue4MAC->EnQueue(msgData);
}
else
{
// printf("entered no more memory....\n");
char strLog[MAX_STRING_LENGTH];
sprintf(strLog, "No more memory for received data from NMCC");
g_pPrintANDLog->PrintANDLog(DEBUG, strLog, recvLen, recvBuffer);
}
}
}
int SendSocketData(uint8_t *buffer, uint8_t bufferLen)
{
int sentLen;
if (g_nSocket <= 0)
{
return -1;
}
else
{
sentLen = write(g_nSocket, buffer, bufferLen);
//printf("sentLen: %d\n", sentLen);
}
return sentLen;
}
struts: 早期Smalltalk 程序语言便采用了MVC(Model-View -Controller) 模式( Patterns ) 以增加程序代码弹性,MVC模式将程序代码整理切割为三部份,Model 部分是业务与应用领域( Business domain) 相关逻辑、管理状态之对象,Controller 部分接收来自View 所输入的资料并与Model 部分互动,是业务流程控制( Flow Control) 之处,View 部分则负责展现资料、接收使用者输入资料。
JSP 皆是可用作View 之技术;而JavaBean 与Enterprise JavaBean 规格则可用于Model 程序代码EJB,一旦应用程序以MVC 模式加以适当之分割,Model 部分程序代码可在不同使用者接口外观之应用程序中重复使用。
让我们从MVC角度观察struts框架中的组件
框架中三个部分:模型,视窗和控制器。
◆模型
在struts框架中,模型分为两个部分:
? 系统的内部状态
? 可以改变状态的操作(事务逻辑)
内部状态通常由一组ActinForm JavaBean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。
大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。
小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。
建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。
◆视窗
由JSP建立,struts包含扩展自定义标签库,可以简化创建完全国际化用户界面的过程。
◆控制器
struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。
[编辑本段]Struts的流程
服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。
以登陆为例:第一次进login.jsp会先实例化Form、把默认值(String默认为空字符串,整形默认为0)赋给表单元素。
输入用户名密码提交表单、提交到action属性的login.do,通过ActionServlet读struts-config.xml文件找到 action下的path属性找到.do,通过name属性找form-beans中的form-bean的name属性得到ActionForm的包名类名,先实例化form,把表单的值填充给form,调用form的validate方法验证、ActionErrors返回null表示验证通过,否则失败返回input指定的页面.验证通过会实例化Action,执行Action的excute方法。
EJB
一.什么是 EJB?
一个技术规范:EJB 从技术上而言不是一种"产品"
EJB 是一种标准描述了构建应用组件要解决的:
可扩展 (Scalable)
分布式 (Distributed)
事务处理 (Transactional)
数据存储 (Persistent)
安全性 (Secure)
三.为什么选择 EJB?
EJB 服务器完成"繁杂"的工作:应用开发人员关注于业务逻辑的实现而不是底层的实现机制(类似于 4GL 语言设计的目标)
支持事务处理
多个业务操作同时成功,或全部失败
可以通过在代码外的描述来定义事务处理级别
可扩展性
EJB 可以根据您应用的增长而扩展
EJB 服务器往往还提供了负载均衡和
安全性:由 EJB 服务器提供资源的访问权限控制
四.EJB 架构
为了满足架构的目标,规范中描述了
服务器 (Server)
容器 (Container)
类 (Class) 和实例 (Instance)
Home 和 Remote 接口
客户端 (Client)
五. 简化的编程模型
关注于业务逻辑实现:EJB 负责生命周期 (lifecycle), 数据存储 (persistence), 事务处理语义 (transactional semantic), 安全(security), ...
通用的编程模型:各种服务的高层 API
Java 是其编程语言
EJB( 业务逻辑代码 ) 表示了与特定商业领域(例如银行、零售等行业)相适应的逻辑。它由
运行在业务逻辑层的 enterprise bean 处理。一个 enterprise bean 可以从客户端接受数据,对
它进行处理,并将其发送到企业信息系统层以作存储;同时它也可以从存储器获取数据,
处理后将其发送到客户端应用程序。
有三种类型的 enterprise beans:session beans、entity beans 和 message-driven beans。
Session bean 描述了与客户端的一个短暂的会话。当客户端的执行完成后,session bean 和
它的数据都将消失;与之相对应的是一个 entity bean 描述了存储在数据库表中的一行持久
稳固的数据,如果客户端终止或者服务结束,底层的服务会负责 entity bean 数据的存储。
Message-driven bean 结合了 session bean 和 Java 信息服务(JMS)信息监听者的功能,它允
许一个商业组件异步地接受 JMS 消息。
Hibernate
目前Hibernate非常受欢迎,它是开发源代码的Java O/R映射框架,目的是把开发人员从繁琐的数据持久化编程中解脱出来。它也有一个标准的HQL(Hibernate 查询语言)语言,你可以在新的EJB QL中看到它的影子。Hibernate在处理如数据查询、更新、连接池、事务处理、实体关系处理等方面非常简单。
======== 面试总结 ==================================
1. 2点40左右到的,hr姐姐很nice
等了没一会,就有个姐姐来叫面试,一开始我以为是hr,到了座位上我才知道这个姐姐是面试官。
2.面试官很nice。上来让我自我介绍一下。哈哈,这次还好有点准备,说了自己的信息后,就说了本科的成绩,研究生的项目经验。主要是介绍最近的这个项目。面试的姐姐一直看着我笑。
针对我的自我介绍,问我本科阶段成绩很好,问有什么秘诀没有。
我就说要保证学习时间,认真啊之类的,然后还有就是要注意下考试的技巧了。
3.然后又针对我的介绍问我这个项目有多少个人参加。我说有两个师兄,我们这级有两个,加上老师一共是五个人。
4.接下来就是实质性的东西了。问我一个int的数,怎么输出这个数的八进制的字符串。。。。 刚开始没有听到是说八进制。。。汗! 刚好昨天在面试攻略上看到了int 到char*怎么输出,巴拉巴拉说了一通。然后jj就问12这个数转换成8进制是多少。。。我突然意识到说的是转成8进制再打印。。。汗@。。。不知道有没有因为这个扣分。。。。按照刚才那个思路想了一会,然后不记得是她提示了还是我自己突然想起来转成二进制,三位三位地读就可以了。。。而后她问是左移还是右移地取,我说是从左边开始三位三位取,这样取出来是先高位后低位,然后打印出来就行了。。。她问怎么打印出来呢。。。直接将数字转成对应的ascill码就行。。例如3:3-0+‘0’
5.接下来这个问题比较让我头疼。。。问汉诺塔问题的非递归方法。。。。这个递归是比较简单了。。。用非递归,肯定是要用栈来实现。可是怎么个实现方法呢。
jj提示说,栈需要保存的东西是递归函数的参数。嗯。。。然后还是不太有思路。然后姐姐就说弄个简单的需要递归的非递归函数来参照一下。我就说了下树先序遍历的非递归。。。。接着就硬着头皮上了。。。。大致写了下思路。。。也不知道对不对。那个姐姐出来打圆场。。。说递归的东西总是让人很晕乎。呵呵。这个题就这么过去了
6.然后问了一个log文件中查找出响应时间在0-9ms,10-19ms。。。之类的。我用了一堆的cut命令,然后sort,然后是wc-l,其实感觉还可以。然后又问如果要自己编程实现会怎么实现。我说用hash。。。。
然后就结束了面试。。。。
我还自我感觉良好。。。回来一查,已经挂掉了。显示面试未通过。
准备的socket通信啊,linux命令之类的一概没用上。。。。可能是因为我投的是软件开发职位吧