最后我们该如何学习?
1、看视频进行系统学习
这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频资料躺在网盘里,有需要的我也可以分享给你:
2、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
Spring源码深度解析:
Mybatis 3源码深度解析:
Redis学习笔记:
Spring Boot核心技术-笔记:
3、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情。
人生短暂,别稀里糊涂的活一辈子,不要将就。
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item){
super.onOptionsItemSelected(item);
switch(item.getItemId()){
case 0:
openDialog();
break;
case 1:
finish();
break;
}
return true;
}
private void openDialog(){
new AlertDialog.Builder(this)
.setTitle(R.string.about)
.setMessage(R.string.message)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}
).show();
}
}
短信回复对话框
package zdq.msg;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class SMSToast extends Activity {
private Button bt_send;
private Button bt_no;
private EditText et_addr;
private EditText et_msg;
private String addr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toast);
getview();
Intent intent = this.getIntent();
addr = (String) intent.getSerializableExtra(“addr”);
et_addr.setText(addr);
et_msg.setText(getResources().getString(R.string.msg_body));
getclick();
}
private void getview(){
bt_send=(Button)findViewById(R.id.bt_send);
bt_no=(Button)findViewById(R.id.bt_no);
et_addr=(EditText)findViewById(R.id.et_addr);
et_msg=(EditText)findViewById(R.id.et_msg);
}
private void getclick(){
bt_send.setOnClickListener(bt_send_onclick);
bt_no.setOnClickListener(bt_no_onclick);
}
private OnClickListener bt_send_οnclick=new OnClickListener(){
@Override
public void onClick(View v) {
SendSms(SMSToast.this,et\_addr.getText().toString(),et\_msg.getText().toString());
finish();
}
};
private OnClickListener bt_no_οnclick=new OnClickListener(){
@Override
public void onClick(View v) {
finish();
}
};
/**
* 发送短信
* @param context
* @param addre
* @param mess
*/
public void SendSms(Context context,String addre, String mess)
{
SmsManager manager \= SmsManager.getDefault();
manager.sendTextMessage(addre, null, mess, null, null);
}
}
短信接收类
package zdq.msg;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
public class SmsReceiver extends BroadcastReceiver{
private static final String strRes = “android.provider.Telephony.SMS_RECEIVED”;
private static final String TAG = “LocalService”;
private String addr;
@Override
public void onReceive(Context context, Intent intent) {
/*
* 判断是否是SMS_RECEIVED事件被触发
*/
if (intent.getAction().equals(strRes)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object\[\] pdus \= (Object\[\]) bundle.get("pdus");
SmsMessage\[\] msg \= new SmsMessage\[pdus.length\];
for (int i = 0; i < pdus.length; i++) {
msg\[i\] \= SmsMessage.createFromPdu((byte\[\]) pdus\[i\]);
}
if(msg.length!=0){
Log.i(TAG, "快速回复模式");
for (SmsMessage currMsg : msg) {
addr\=currMsg.getDisplayOriginatingAddress();
Intent mBootIntent \= new Intent(context, SmsReceiver.class);
mBootIntent \= new Intent(context, SMSToast.class);
mBootIntent.setAction("android.intent.action.MAIN");
mBootIntent.addCategory("android.intent.category.LAUNCHER");
mBootIntent.setFlags(Intent.FLAG\_ACTIVITY\_NEW\_TASK);
Bundle mBundle \= new Bundle();
mBundle.putSerializable("addr",addr);
mBootIntent.putExtras(mBundle);
context.startActivity(mBootIntent);
}
}
}
}
}
}
服务
package zdq.msg;
import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class Smsservice extends Service {
private boolean isregiset = false;
private static final String MSG\_RECEIVED = "android.provider.Telephony.SMS\_RECEIVED";
private static final String TAG = “LocalService”;
private SmsReceiver recevier;
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, “onBind”);
return null;
}
@Override
public void onDestroy()
{
Log.i(TAG, “onDestroy”);
super.onDestroy();
unregisterReceiver(recevier);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.i(TAG, “onStartCommand”);
return super.onStartCommand(intent, flags, startId);
}
public void onStart(Intent intent,int startId){
Log.i(TAG, “onStart”);
super.onStart(intent, startId);
recevier=new SmsReceiver();
IntentFilter intentFilter = new IntentFilter(MSG_RECEIVED);
intentFilter.setPriority(1000);//设置优先级最大
registerReceiver(recevier , intentFilter);
isregiset\=true;
}
public void onCreate(){
Log.i(TAG, “onCreate”);
super.onCreate();
}
public void regiset(View v) {
IntentFilter filter \= new IntentFilter(MSG\_RECEIVED);
filter.setPriority(1000);//设置优先级最大
registerReceiver(recevier, filter);
isregiset \= true;
Toast.makeText(this, "0", 0).show();
}
public void unregiset(View v) {
if (recevier != null && isregiset) {
unregisterReceiver(recevier);
isregiset \= false;
Toast.makeText(this, "成功", 0).show();
} else
Toast.makeText(this, "失败", 0).show();
}
}
mail.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:layout\_width\="fill\_parent"
android:layout\_height\="fill\_parent"
android:orientation\="vertical" >
<Button
android:id\="@+id/bt01"
android:layout\_width\="fill\_parent"
android:layout\_height\="wrap\_content"
最后
Java架构进阶面试及知识点文档笔记
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
互联网Java程序员面试必备问题解析及文档学习笔记
Java架构进阶视频解析合集
这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理
[外链图片转存中…(img-WAftx7Fq-1715610424196)]
Java分布式高级面试问题解析文档
其中都是包括分布式的面试问题解析,内容有分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
[外链图片转存中…(img-qA3KMYod-1715610424197)]
互联网Java程序员面试必备问题解析及文档学习笔记
[外链图片转存中…(img-qNehYmDG-1715610424197)]
Java架构进阶视频解析合集