Java开发:代码实践与面试技巧
1. Java消息监听代码解析
在Java开发中,消息监听是一个常见的功能。以下是一段相关的代码:
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(jmsListener);
connection.start();
public static void stopListening() {
try {
connection.stop();
}
catch (JMSException e) {
throw new RuntimeException(e);
}
}
private static Connection connection;
private static class JMSListener implements MessageListener {
private MessageHandler messageHandler;
private JMSListener(MessageHandler messageHandler) {
this.messageHandler = messageHandler;
}
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("Got message: " + textMessage.getText());
messageHandler.handle(textMessage.getText());
}
catch (JMSException e) {
throw new RuntimeException(e);
}
}
}
public interface MessageHandler {
void handle(String message);
}
上述代码实现了一个简单的消息监听功能。首先,创建一个消息消费者
consumer
,并为其设置消息监听器
jmsListener
,然后启动连接。
stopListening
方法用于停止监听。
JMSListener
类实现了
MessageListener
接口,当接收到消息时,会将消息转换为文本消息并进行处理。
2. JavaFX客户端代码分析
JavaFX是一个用于创建富客户端应用程序的框架。以下是一个JavaFX客户端的代码示例:
class JavaFXMessageHandler extends MessageHandler {
override public function handle(message:String):Void {
FX.deferAction( function() { addNewText(message) } );
}
}
Messages.startListening(new JavaFXMessageHandler());
var oldText = "";
var newText = "";
var oldTextOpacity = 0.0;
var oldTextYShift = -40.0;
var font = Font {
name: "Verdana"
size: 16
}
var oldTextLabel:Label = Label {
font: font
text: bind oldText
textFill: Color.web("#808020")
translateY: bind oldTextYShift
opacity: bind oldTextOpacity
}
var newTextOpacity = 0.0;
var newTextYShift = 40.0;
var newTextLabel:Label = Label {
textAlignment: TextAlignment.CENTER
font: font
textFill: Color.web("#808020")
text: bind newText
translateY: bind newTextYShift
opacity: bind newTextOpacity;
}
var oldTextAnimation = Timeline {
repeatCount: 1
keyFrames: [
at (0s) {
oldTextOpacity => 1.0 tween Interpolator.LINEAR;
oldTextYShift => 0.0 tween Interpolator.LINEAR;
}
at (1s) {
oldTextOpacity => 0.0 tween Interpolator.LINEAR;
oldTextYShift => -40.0 tween Interpolator.LINEAR;
}
];
}
var newTextAnimation = Timeline {
repeatCount: 1
keyFrames: [
at (0s) {
newTextOpacity => 0.0 tween Interpolator.LINEAR;
newTextYShift => 40.0 tween Interpolator.LINEAR;
}
at (.5s) {
newTextOpacity => 1.0 tween Interpolator.LINEAR;
newTextYShift => 0.0 tween Interpolator.LINEAR;
}
];
}
function addNewText(text: String): Void {
oldText = newText;
newText = text;
oldTextAnimation.playFromStart();
newTextAnimation.playFromStart();
}
Stage {
title: "Application title"
scene: Scene {
width: 600
height: 100
content: VBox {
content: [
Stack {
nodeHPos: HPos.CENTER
content: [
Rectangle {
width: 600
height: 80
opacity: 0.3
fill: LinearGradient {
startX: 0, startY: 0.0, endX: 0, endY: 80.0
proportional: false
stops: [
Stop { offset: 0.0 color:
Color.web("#303030") }
Stop { offset: 1.0 color:
Color.web("#FFFFFF") }
]
}
},
oldTextLabel,
newTextLabel ]
}]
}
}
onClose : function() { Messages.stopListening(); }
}
这段代码创建了一个JavaFX客户端应用程序。
JavaFXMessageHandler
类继承自
MessageHandler
,用于处理接收到的消息。通过
addNewText
函数更新文本内容,并使用
Timeline
类实现动画效果。
Stage
和
Scene
用于创建应用程序的窗口和场景。
3. HTML客户端与部署
为了提供另一种访问消息系统的方式,可以使用HTML客户端。以下是一个简单的HTML客户端代码:
<html>
<head>
<title>JMS Demo</title>
</head>
<body>
Click this link to open <a href="prices.html">
JavaFX client consuming price quotes</a>
<p>Enter any text in the input field below and watch how JavaFx
client will receive it</p>
<form action="send" method="POST">
<label title="Text to send">
<input value="" name="text"/>
</label>
</form>
</body>
</html>
当用户在输入框中输入文本并按下回车键时,文本将被发送到服务器。服务器端的
SendMessage
servlet会处理该请求:
@WebServlet("/send")
public class SendMessage extends HttpServlet {
@EJB
private MessageService messageService;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String text = request.getParameter("text");
messageService.sendMessage(text);
response.sendRedirect("index.html");
}
}
为了部署JavaFX应用程序,需要创建一个JNLP文件:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+">
<information>
<title>jms-send-receive</title>
<vendor>practicaljava</vendor>
<homepage href=""/>
<description>jms send and receive</description>
<offline-allowed/>
</information>
<resources>
<j2se version="1.5+"/>
<extension name="JavaFX Runtime"
href="http://dl.javafx.com/1.3.1/javafx-rt.jnlp"/>
<jar href="javafx-ui.jar" main="true"/>
</resources>
<applet-desc name="javafx-ui"
main-class="com.sun.javafx.runtime.adapter.Applet"
width="200" height="80">
<param name="MainJavaFXScript" value="com.practicaljava.lesson37.ui.Main"/>
</applet-desc>
<update check="always"/>
</jnlp>
这个JNLP文件列出了需要下载到客户端的资源,包括JavaFX运行时和相关的JAR文件。
4. 项目构建与部署步骤
要构建和部署这个应用程序,可以按照以下步骤进行:
1.
安装Mercurial
:从http://mercurial.selenic.com下载并安装分布式源控制管理工具Mercurial。在终端窗口中输入
hg –version
,确认安装成功。
2.
获取代码
:在终端窗口中输入以下命令,将代码示例检出到
java24hourtrainer
文件夹中:
hg clone https://practicaljava.googlecode.com/hg/ java24hourtrainier
- 安装JavaFX SDK :从http://javafx.com/downloads/all.jsp?bundle=javafx_sdk下载并安装JavaFX 1.3 SDK。
-
检查Maven
:在命令提示符下输入
mvn –v,检查是否已安装Maven。如果未安装,从http://maven.apache.org/download.html下载并安装。 -
构建项目
:在终端或命令窗口中,进入
java24hourtrainer/java-ee/lesson37目录,运行mvn install。 -
创建
settings.xml文件 :在.m2目录下创建一个名为settings.xml的文本文件,内容如下:
<settings>
<pluginGroups>
<pluginGroup>com.practicaljava.maven.plugin</pluginGroup>
</pluginGroups>
</settings>
-
构建插件
:进入
java24hourtrainer/maven-plugins目录,运行mvn install。 -
部署应用程序
:进入
/java-ee/lesson37/web-demo目录,运行以下命令:
mvn gf:create-domain
mvn gf:start-domain
mvn gf:deploy
-
启动Open MQ
:启动Open MQ并创建一个名为
Prices的主题。 -
配置GlassFish
:在浏览器中打开http://localhost:5000/,创建
TopicConnectionFactory和jms/StockPrices主题。 - 测试应用程序 :确保Open MQ和GlassFish服务器正在运行,在浏览器中访问http://localhost:8080/javafx-web-demo/,测试应用程序。
5. Java技术面试技巧
在Java技术面试中,有一些规则和技巧可以提高面试成功率。整个求职过程可以分为三个阶段:
| 阶段 | 要点 |
| ---- | ---- |
| 获取面试机会 | 调整简历以突出与职位相关的技能,利用网络拓展人脉。 |
| 成功面试 | 提前了解职位的技术细节,准备相关的技术话题,帮助面试官了解自己的技术能力。 |
| 考虑录用通知 | 综合考虑薪资、福利、职业发展等因素。 |
5.1 获取面试机会
- 优化简历 :根据职位要求调整简历,突出相关技能,避免包含无关信息。
- 利用网络 :参加Java用户组会议、关注Java开发者的Twitter账号、参加专业会议和研讨会。
5.2 成功面试
- 了解职位细节 :从招聘人员那里获取尽可能多的技术细节,提前进行研究。
- 准备技术话题 :准备一些有趣和具有挑战性的技术问题,主动引导面试话题。
- 练习测试题 :对于初级开发者,可以做一些认证考试的选择题,提高应对测试的能力。
以下是一个简单的面试准备流程:
graph LR
A[获取职位信息] --> B[研究技术细节]
B --> C[准备技术话题]
C --> D[练习测试题]
D --> E[参加面试]
通过以上的代码实践和面试技巧,希望能帮助你在Java开发领域取得更好的成绩。无论是构建应用程序还是应对面试,都需要不断学习和实践。
Java开发:代码实践与面试技巧(续)
6. 代码功能深入解析
6.1 Java消息监听部分
在Java消息监听的代码中,
MessageConsumer
负责从指定的
topic
接收消息。
consumer.setMessageListener(jmsListener)
这行代码将消息监听器
jmsListener
绑定到消费者上,当有新消息到达时,
JMSListener
类中的
onMessage
方法会被触发。在
onMessage
方法里,将接收到的消息转换为
TextMessage
类型,然后通过
messageHandler.handle(textMessage.getText())
将消息内容传递给消息处理器进行处理。
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(jmsListener);
connection.start();
public static void stopListening() {
try {
connection.stop();
}
catch (JMSException e) {
throw new RuntimeException(e);
}
}
private static Connection connection;
private static class JMSListener implements MessageListener {
private MessageHandler messageHandler;
private JMSListener(MessageHandler messageHandler) {
this.messageHandler = messageHandler;
}
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("Got message: " + textMessage.getText());
messageHandler.handle(textMessage.getText());
}
catch (JMSException e) {
throw new RuntimeException(e);
}
}
}
public interface MessageHandler {
void handle(String message);
}
6.2 JavaFX客户端部分
JavaFX客户端代码实现了一个动态显示消息的界面。
JavaFXMessageHandler
类继承自
MessageHandler
,重写了
handle
方法,使用
FX.deferAction
异步调用
addNewText
函数更新文本内容。
addNewText
函数会更新
oldText
和
newText
的值,并启动
oldTextAnimation
和
newTextAnimation
动画。
Timeline
类通过设置关键帧(
keyFrames
)来实现动画效果,在不同的时间点改变文本的透明度和位置。
class JavaFXMessageHandler extends MessageHandler {
override public function handle(message:String):Void {
FX.deferAction( function() { addNewText(message) } );
}
}
Messages.startListening(new JavaFXMessageHandler());
var oldText = "";
var newText = "";
var oldTextOpacity = 0.0;
var oldTextYShift = -40.0;
var font = Font {
name: "Verdana"
size: 16
}
var oldTextLabel:Label = Label {
font: font
text: bind oldText
textFill: Color.web("#808020")
translateY: bind oldTextYShift
opacity: bind oldTextOpacity
}
var newTextOpacity = 0.0;
var newTextYShift = 40.0;
var newTextLabel:Label = Label {
textAlignment: TextAlignment.CENTER
font: font
textFill: Color.web("#808020")
text: bind newText
translateY: bind newTextYShift
opacity: bind newTextOpacity;
}
var oldTextAnimation = Timeline {
repeatCount: 1
keyFrames: [
at (0s) {
oldTextOpacity => 1.0 tween Interpolator.LINEAR;
oldTextYShift => 0.0 tween Interpolator.LINEAR;
}
at (1s) {
oldTextOpacity => 0.0 tween Interpolator.LINEAR;
oldTextYShift => -40.0 tween Interpolator.LINEAR;
}
];
}
var newTextAnimation = Timeline {
repeatCount: 1
keyFrames: [
at (0s) {
newTextOpacity => 0.0 tween Interpolator.LINEAR;
newTextYShift => 40.0 tween Interpolator.LINEAR;
}
at (.5s) {
newTextOpacity => 1.0 tween Interpolator.LINEAR;
newTextYShift => 0.0 tween Interpolator.LINEAR;
}
];
}
function addNewText(text: String): Void {
oldText = newText;
newText = text;
oldTextAnimation.playFromStart();
newTextAnimation.playFromStart();
}
Stage {
title: "Application title"
scene: Scene {
width: 600
height: 100
content: VBox {
content: [
Stack {
nodeHPos: HPos.CENTER
content: [
Rectangle {
width: 600
height: 80
opacity: 0.3
fill: LinearGradient {
startX: 0, startY: 0.0, endX: 0, endY: 80.0
proportional: false
stops: [
Stop { offset: 0.0 color:
Color.web("#303030") }
Stop { offset: 1.0 color:
Color.web("#FFFFFF") }
]
}
},
oldTextLabel,
newTextLabel ]
}]
}
}
onClose : function() { Messages.stopListening(); }
}
6.3 HTML客户端与部署部分
HTML客户端通过一个简单的表单将用户输入的文本发送到服务器。服务器端的
SendMessage
servlet接收请求,调用
messageService.sendMessage(text)
将消息发送到消息系统。
JNLP文件用于部署JavaFX应用程序,它列出了需要下载到客户端的资源,包括JavaFX运行时和相关的JAR文件。客户端通过JavaScript函数
javafx
加载JNLP文件,确保客户端计算机有正确的JRE版本。
<html>
<head>
<title>JMS Demo</title>
</head>
<body>
Click this link to open <a href="prices.html">
JavaFX client consuming price quotes</a>
<p>Enter any text in the input field below and watch how JavaFx
client will receive it</p>
<form action="send" method="POST">
<label title="Text to send">
<input value="" name="text"/>
</label>
</form>
</body>
</html>
@WebServlet("/send")
public class SendMessage extends HttpServlet {
@EJB
private MessageService messageService;
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String text = request.getParameter("text");
messageService.sendMessage(text);
response.sendRedirect("index.html");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+">
<information>
<title>jms-send-receive</title>
<vendor>practicaljava</vendor>
<homepage href=""/>
<description>jms send and receive</description>
<offline-allowed/>
</information>
<resources>
<j2se version="1.5+"/>
<extension name="JavaFX Runtime"
href="http://dl.javafx.com/1.3.1/javafx-rt.jnlp"/>
<jar href="javafx-ui.jar" main="true"/>
</resources>
<applet-desc name="javafx-ui"
main-class="com.sun.javafx.runtime.adapter.Applet"
width="200" height="80">
<param name="MainJavaFXScript" value="com.practicaljava.lesson37.ui.Main"/>
</applet-desc>
<update check="always"/>
</jnlp>
7. 项目构建与部署的注意事项
在项目构建和部署过程中,有一些需要注意的地方:
-
Mercurial安装
:确保Mercurial正确安装并配置,通过
hg –version
命令验证安装情况。
-
Maven配置
:Maven的环境变量需要正确设置,确保
mvn
命令可以正常使用。在创建
settings.xml
文件时,要注意文件路径和内容的正确性。
-
服务器配置
:Open MQ和GlassFish服务器的配置需要按照步骤进行,确保主题和连接工厂正确创建。
-
客户端权限
:在测试JavaFX应用程序时,可能会遇到客户端权限问题,需要允许JavaFX插件访问计算机。
8. 面试技巧的补充说明
8.1 面试中的沟通技巧
在面试过程中,良好的沟通技巧非常重要。清晰、准确地表达自己的想法,避免使用过于复杂或模糊的语言。当面试官提出问题时,要认真倾听,确保理解问题的含义后再回答。如果不确定问题,可以请求面试官进一步解释。
在介绍自己的技术经验和项目时,要有条理地进行阐述,突出重点和关键技术。可以使用一些实际的案例来支持自己的观点,让面试官更好地了解自己的能力。
8.2 应对压力面试
有些面试可能会采用压力面试的方式,面试官可能会提出一些尖锐或具有挑战性的问题。在这种情况下,要保持冷静,不要被问题的表面所吓倒。可以先思考一下问题的本质,然后有条理地回答。
如果遇到自己不会的问题,不要慌张,可以诚实地告诉面试官自己不太熟悉这个领域,但表示愿意学习和了解。同时,可以尝试从自己熟悉的相关领域进行类比和推理,展示自己的学习能力和思维方式。
以下是一个面试应对流程的细化:
graph LR
A[获取职位信息] --> B[研究技术细节]
B --> C[准备技术话题]
C --> D[练习测试题]
D --> E[参加面试]
E --> F{遇到问题}
F -- 简单问题 --> G[清晰回答]
F -- 复杂问题 --> H[思考本质后回答]
F -- 不会的问题 --> I[诚实表达并尝试类比推理]
通过深入理解代码功能和掌握面试技巧,你可以在Java开发领域更加游刃有余。无论是开发应用程序还是应对面试,都需要不断积累经验,提高自己的技术水平和综合素质。希望以上内容对你有所帮助,祝你在Java开发的道路上取得更大的成功。
超级会员免费看

被折叠的 条评论
为什么被折叠?



