赞
踩
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
getDirections(point);
}
});
}
public void getDirections(LatLng point) {
Location myLocation = mMap.getMyLocation();
LatLng myLatLng = new LatLng(myLocation.getLatitude(),
myLocation.getLongitude());
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(“http://maps.google.com/maps?saddr=”
+ myLatLng.latitude + “,” + myLatLng.longitude
+ “&daddr=” + point.latitude + “,” + point.longitude));
intent.setClassName(“com.google.android.apps.maps”, “com.google.android.maps.MapsActivity”);
startActivity(intent);
}
6. 在 Android Auto 中运行应用程序,并测试地图和导航功能。 需要注意的是,上面的代码只是一个简单的示例,实际应用程序需要根据具体需求进行修改和调试。 ### 12.如何使用 Android Auto 在车辆上显示充电站信息? 要在 Android Auto 上显示充电站信息,您可以按照以下步骤操作: 1. 添加 Google Play 服务库和 Android Auto 库到 Android 项目中。 2. 创建一个枚举类,其中包含用于过滤充电站结果的常量。
public enum FilterTypeEnum {
TYPE_ALL(“all”),
TYPE_FAST_CHARGING(“fast”),
TYPE_LEVEL_2(“level2”);
private final String filterType;
FilterTypeEnum(String filterType) {
this.filterType = filterType;
}
public String getFilterType() {
return filterType;
}
}
3. 使用 Google Map SDK 和 Places API 来获取附近的充电站。
Places.initialize(getApplicationContext(), API_KEY);
PlacesClient placesClient = Places.createClient(this);
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.NAME,
Place.Field.ADDRESS, Place.Field.LAT_LNG,
Place.Field.TYPES);
RectangularBounds bounds = RectangularBounds.newInstance(
new LatLng(LAT, LNG),
RADIUS_IN_METERS);
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);
placesClient.findCurrentPlace(request).addOnSuccessListener((response) -> {
List placesList = response.getPlaceLikelihoods();
for (PlaceLikelihood placeLikelihood : placesList) { Place currentPlace = placeLikelihood.getPlace(); List<Integer> placeTypes = currentPlace.getTypes(); LatLng latLng = currentPlace.getLatLng(); String placeName = currentPlace.getName(); String address = currentPlace.getAddress(); // 判断充电站类型并过滤 if (placeTypes.contains(Place.Type.ELECTRIC_VEHICLE_CHARGING_STATION)) { if (filterType.equals(FilterTypeEnum.TYPE_ALL.getFilterType())) { // 添加充电站标记到地图上 mMap.addMarker(new MarkerOptions().position(latLng).title(placeName).snippet(address)); } else if (filterType.equals(FilterTypeEnum.TYPE_FAST_CHARGING.getFilterType())) { // 如果选中了只显示快充站,判断该充电站是否是快充站 if (placeTypes.contains(Place.Type.ELECTRIC_VEHICLE_CHARGING_STATION)) { mMap.addMarker(new MarkerOptions().position(latLng).title(placeName).snippet(address)); } } else if (filterType.equals(FilterTypeEnum.TYPE_LEVEL_2.getFilterType())) { // 如果选中了只显示 Level 2 站,判断该充电站是否是 Level 2 站 if (placeTypes.contains(Place.Type.ELECTRIC_VEHICLE_CHARGING_STATION)) { mMap.addMarker(new MarkerOptions().position(latLng).title(placeName).snippet(address)); } } } }
});
4. 在 Android Auto 应用程序中创建一个充电站列表,显示地图中的附近充电站,并可根据需要过滤结果。
// 定义过滤器类型数组
private final String[] FILTER_TYPE_OPTIONS = new String[]{
FilterTypeEnum.TYPE_ALL.getFilterType(),
FilterTypeEnum.TYPE_FAST_CHARGING.getFilterType(),
FilterTypeEnum.TYPE_LEVEL_2.getFilterType()
};
// 创建过滤器类型下拉列表框
ArrayAdapter adapter = new ArrayAdapter<>(getApplicationContext(), R.layout.filter_type_item, FILTER_TYPE_OPTIONS);
Spinner filterTypeSpinner = findViewById(R.id.filter_type_spinner);
filterTypeSpinner.setAdapter(adapter);
// 监听过滤器类型下拉列表框的选择事件,根据所选类型过滤地图中的充电站
filterTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
String filterType = FILTER_TYPE_OPTIONS[position];
mMap.clear();
// 过滤地图上的充电站
getNearbyChargingStations(filterType);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
这些步骤将允许您通过 Android Auto 应用程序获取附近的充电站,并根据需要进行过滤。
### 13.如何在 Android Auto 应用程序中使用语音命令?
要在 Android Auto 应用程序中使用语音命令,可以参考以下步骤:
1. 在 AndroidManifest.xml 文件中添加以下权限声明:
2. 在 build.gradle 文件中添加以下依赖项:
implementation ‘com.google.android.support:wearable:2.5.0-alpha1’
implementation ‘com.google.android.gms:play-services-places:17.0.0’
3. 在代码中添加以下语音识别逻辑:
private static final int SPEECH_REQUEST_CODE = 0;
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) {
List results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
// 这里可以使用意图处理语音命令,例如打开地图或搜索
}
super.onActivityResult(requestCode, resultCode, data);
}
4. 在用户点击语音按钮时调用 displaySpeechRecognizer() 方法。
@Override
public boolean onVoiceCommand(String command, Bundle extras) {
if (command.equals(“voice_search”)) {
displaySpeechRecognizer();
return true;
}
return false;
}
在上述代码中,我们首先定义了一个 SPEECH\_REQUEST\_CODE 常量用于识别语音回调,并且添加了一个 displaySpeechRecognizer() 方法,该方法会打开一个语音识别界面,用户可以对其发出语音命令,然后将识别结果作为字符串传递回 MainActivity。然后,我们在 onActivityResult() 回调函数中获取识别结果,并使用意图处理语音命令,例如打开地图或搜索。最后,在 onVoiceCommand() 回调函数中,我们检查用户是否点击了语音搜索按钮,如果是,则调用 displaySpeechRecognized() 方法。 需要注意的是,在 Android Auto 项目中,需要在 Auto 安全测试工具中测试语音功能是否符合安全标准。 ### 14.如何在 Android Auto 中执行车辆诊断? 在 Android Auto 中执行车辆诊断需要满足以下条件: 1. 车辆诊断接口支持 OBD-II 协议。 2. 连接路由器与 Android 设备。 一般情况下,可以使用 OBD-II 扫描仪或者车载电脑来读取车辆参数并进行诊断,然后将扫描仪或车载电脑通过 Wi-Fi 或蓝牙与路由器连接,再将路由器通过 Wi-Fi 与 Android 设备连接。 在 Android 应用程序中,可以使用以下类库和工具,来读取 OBD-II 诊断数据并在 Android Auto 中显示诊断结果: 1. Android 外设框架(Android Accessory Framework),可以将 OBD-II 扫描仪或车载电脑作为 Android 设备的外设,并通过接口读取 OBD-II 诊断数据。 2. OBD-II 工具包(OBD-II Toolbox),是一个 OBD-II 软件工具包,可以读取和解析 OBD-II 诊断数据,为 Android 应用程序提供接口。 3. Android Auto 车载应用程序模板(Android Auto App Template),是一个基于 Android Studio 的模板应用程序,为在 Android Auto 上显示诊断结果提供了示例代码和布局文件。 在应用程序中,可以使用以下步骤在 Android Auto 中执行车辆诊断: 1. 使用外设框架或 OBD-II 工具包读取 OBD-II 诊断数据,并将数据格式化为所需的数据结构。 2. 在应用程序的布局文件中添加一个显示诊断结果的控件,例如 TextView 或 ListView。 3. 在应用程序的活动中,使用 Adapter 将诊断结果绑定到显示控件中,并在 Android Auto 上显示诊断结果。可以使用 RecyclerView 或 ListView,并根据需求自定义 Adapter。 ### 15. 如何在 Android Auto 中执行车辆控制? Android Auto 并不支持在驾驶中使用需要手动操作的应用程序,包括车辆控制应用程序。因此,不建议在 Android Auto 中实现车辆控制功能。 在某些特定的场景下,可能需要实现一些不需要手动干预的车辆控制功能,例如自动驾驶的车辆控制。对于这种场景,可以考虑以下建议: 1. 确保车辆支持远程控制功能,例如基于互联网的远程启动、远程锁车等功能。 2. 设计一个基于互联网的远程控制应用程序,允许用户在车辆停放的状态下远程控制车辆。此应用程序不需要手动操作,只需要接收用户发送的指令实现远程控制。 3. 在此应用程序中,采用安全机制保证用户权限,例如需要用户登录、验证码验证等方式实现身份验证和安全控制。 4. 使用两个不同的通道进行控制指令的传输,例如使用 HTTP 协议和 Websocket 协议,以增加指令传输的安全性和可靠性。 5. 根据车辆的不同型号和控制接口,适配不同的控制指令,例如发动机启停、喇叭鸣叫、车窗升降、车辆锁定解锁等。 在实现车辆控制的功能时,需要充分考虑安全因素,避免恶意攻击或误操作导致车辆故障或人身伤害。特别是在自动驾驶或高级辅助驾驶场景中,需要充分考虑安全性和法律法规的合规性,确保车辆控制的安全和合法。 ### 16.如何在 Android Auto 中使用车载摄像头? 在Android Auto中使用车载摄像头需要遵循以下步骤: 1. 确定Android Auto支持的摄像头类型和分辨率。Android Auto支持USB连接的后置摄像头,并支持以下分辨率:1280 x 720、720 x 480和640 x 480。此外,Android Auto还支持由汽车制造商提供的OEM摄像头。 2. 根据Android Auto的要求,为摄像头提供必需的权限。在AndroidManifest文件中添加以下权限:
3. 在应用程序中添加摄像头的布局界面。可以在XML布局文件中使用CameraView或SurfaceView进行摄像头预览和捕捉相机图像。
4. 在Activity或Fragment中获取摄像头引用和预览。例如:
// 获取后置摄像头
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameraIdList = cameraManager.getCameraIdList(); // 获取摄像头列表
String cameraId = cameraIdList[0]; // 获取后置摄像头
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
// 显示摄像头预览
TextureView textureView = (TextureView) findViewById(R.id.textureView); // 布局文件中定义的预览布局
SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
Surface surface = new Surface(surfaceTexture);
CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.addTarget(surface);
cameraDevice.createCaptureSession(Arrays.asList(surface),new CameraCaptureSession.StateCallback() {…}, null);
在实现过程中,需要考虑安全性和用户隐私,确保摄像头的使用遵循用户意图和法律法规。此外,需要提供友好的UI界面和操作体验,便于用户在不影响驾驶安全的情况下使用车载摄像头。
### 17.如何在 Android Auto 中使用车载传感器?
在Android Auto中使用车载传感器需要遵循以下步骤:
1. 确定Android Auto支持的传感器类型和参数。Android Auto支持的传感器包括加速度计、陀螺仪、磁力计和GPS定位,可以使用传感器库或API获取传感器数据并进行处理。
2. 根据Android Auto的要求,为传感器提供必需的权限。在AndroidManifest文件中添加以下权限:
3. 在应用程序中添加传感器的操作和监听器。例如,获取加速度计数据的代码示例:
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
SensorEventListener sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// 处理加速度计数据
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 传感器精度变化
}
};
sensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
4. 根据业务需求或用户需求对传感器数据进行处理和展示。对于GPS定位数据,可以使用Google Maps API进行解析和展示,实现车辆位置和目的地导航等功能。 在实现过程中,需要考虑数据传输的稳定性和安全性,保证传感器读取和处理的准确性和及时性。此外,需要特别注意传感器使用对车辆安全的影响,保证传感器操作不会干扰驾驶员的注意力和控制能力。 ### 18.如何在 Android Auto 中使用车辆信息? Android Auto允许应用程序访问车辆信息(车速,油量等)和车辆状态(车门状态等)。在Android Auto中使用车辆信息需要遵循以下步骤: 1. 确定Android Auto支持的车辆信息类型和参数,以及车辆状态类型和参数。 Android Auto支持的车辆信息包括车速,油量,里程等,车辆状态包括车门状态,发动机状态等。可以使用API或车辆信息库来获取车辆信息和车辆状态数据。 2. 根据Android Auto的要求,为车辆信息提供必需的权限。在AndroidManifest文件中添加以下权限:
3. 在应用程序中添加对车辆信息的操作和监听器。例如,获取车速的代码示例:
CarInfoManager carInfoManager = CarInfoManager.getInstance(car);
CarPropertyManager carPropertyManager = CarPropertyManager.getInstance(car);
CarProperty speedProperty = carPropertyManager.getProperty(CarSensorManager.SENSOR_TYPE_CAR_SPEED, CarProperty.PERMISSION_READ);
CarPropertyEventListener carPropertyEventListener = new CarPropertyEventListener() {
@Override
public void onChangeEvent(CarPropertyValue value) {
float speed = value.getValue()[0];
// 处理车速数据
}
};
carPropertyManager.registerListener(carPropertyEventListener, speedProperty);
4. 根据业务需求或用户需求对车辆信息进行处理和展示。例如,根据车速和油量信息调整导航路线和提示。 在实现过程中,需要考虑车辆信息的安全性和隐私保护,保证车辆信息的读取和处理符合相关法规和规定。此外,需要特别注意车辆信息操作对车辆驾驶的影响,保证车辆信息操作不会干扰驾驶员的注意力和控制能力。 ### 19. 如何在 Android Auto 中使用车辆导航? 在 Android Auto 中使用车辆导航需要遵循以下步骤: 1. 检查导航权限 在使用车辆导航之前,需要检查应用程序是否有导航权限。可以使用以下代码进行检查:
// 检查是否具有导航权限
if (!NavigationManager.getInstance().hasNavigationPermission()) {
// 请求导航权限
NavigationManager.getInstance().requestNavigationPermission();
}
如果应用程序没有导航权限,则需要请求导航权限。
2. 获取当前位置
在具有导航权限的情况下,可以使用 LocationManager 类获取当前位置。可以使用以下代码获取当前位置:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (lastKnownLocation != null) {
double latitude = lastKnownLocation.getLatitude();
double longitude = lastKnownLocation.getLongitude();
// 处理获取到的位置信息
}
如果需要动态获取位置信息,则需要注册位置监听器并实现相应的回调方法。
3. 设置目的地
在获取到当前位置后,可以使用 NavigationManager 类设置目的地。可以使用以下代码设置目的地:
NavigationManager.getInstance().setDestination(new LatLng(destLatitude, destLongitude), “目的地名称”);
其中,destLatitude 和 destLongitude 是目的地的经纬度。
4. 开始导航
在设置目的地后,可以使用 NavigationManager 类开始导航。可以使用以下代码开始导航:
NavigationManager.getInstance().startNavigation();
导航期间,可以使用 NavigationManager 类提供的各种方法来处理导航数据、更新导航信息等。 在使用车辆导航时,需要充分考虑用户体验和车辆安全等因素,并合理控制导航功能,保证应用程序的可靠性和安全性。 总的来说,在 Android Auto 中使用车辆导航需要检查导航权限、获取当前位置、设置目的地、开始导航等步骤。在实现过程中,需要注意用户体验、车辆安全等因素,保证功能的可靠性和安全性。 ### 20. 如何在 Android Auto 中使用蓝牙设备? 在 Android Auto 中使用蓝牙设备需要遵循以下步骤: 1. 检查蓝牙权限 在使用蓝牙设备之前,需要检查应用程序是否有蓝牙权限。可以使用以下代码进行检查:
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (bluetoothAdapter != null && bluetoothAdapter.isEnabled()) {
// 拥有蓝牙权限,可以使用蓝牙设备
} else {
// 没有蓝牙权限,需要请求蓝牙权限
}
如果应用程序没有蓝牙权限,则需要请求蓝牙权限。
2. 连接蓝牙设备
在蓝牙权限正常的情况下,可以使用 BluetoothAdapter 类来搜索和连接蓝牙设备。可以使用以下代码搜索蓝牙设备:
bluetoothAdapter.startDiscovery();
当发现蓝牙设备时,会触发 ACTION\_FOUND 广播。可以使用以下代码注册广播接收器来监听广播:
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// 处理发现蓝牙设备的操作
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(broadcastReceiver, filter);
在发现蓝牙设备后,可以使用以下代码连接蓝牙设备:
bluetoothAdapter.getRemoteDevice(address).connect();
其中,address 是蓝牙设备的 MAC 地址。
3. 使用蓝牙设备
在连接蓝牙设备后,可以使用 BluetoothSocket 类来进行蓝牙通信。可以使用以下代码获取 BluetoothSocket 对象:
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();
其中,device 是连接的蓝牙设备对象,uuid 是通信协议的 UUID。
在获取 BluetoothSocket 对象后,可以使用 InputStream 和 OutputStream 对象进行数据传输。例如,可以使用以下代码读取数据:
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
String data = new String(buffer, 0, length);
在使用蓝牙设备时,需要充分考虑用户体验和车辆安全等因素,并合理使用蓝牙设备功能,保证应用程序的可靠性和安全性。 总的来说,在 Android Auto 中使用蓝牙设备需要检查蓝牙权限、连接蓝牙设备、使用蓝牙设备等步骤。在实现过程中,需要注意用户体验、车辆安全等因素,保证功能的可靠性和安全性。 ### 21.如何在 Android Auto 中实现 Wi-Fi 热点? 在 Android Auto 中实现 Wi-Fi 热点,需要使用 Android 操作系统提供的 API。具体步骤如下: 1. 添加权限 在 AndroidManifest.xml 文件中添加以下权限:
2. 获取 Wi-Fi 管理器
使用 getSystemService() 方法获取 Wi-Fi 管理器:
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
3. 配置 Wi-Fi 热点
创建一个 Wi-Fi 配置对象,并设置 SSID、密码、加密方式等参数:
WifiConfiguration wifiConfiguration = new WifiConfiguration();
wifiConfiguration.SSID = “hotspot_name”; // 设置热点 SSID
wifiConfiguration.preSharedKey = “password”; // 设置热点密码
wifiConfiguration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); // 设置热点加密方式
wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); // 设置热点加密方式
总的来说,在 Android Auto 中实现 Wi-Fi 热点,需要添加权限、获取 Wi-Fi 管理器、配置 Wi-Fi 热点、开启热点并获取热点信息、停止热点几个步骤。 ### 22. 如何使用 Android Auto 播放音乐和视频? 在 Android Auto 中播放音乐和视频,需要使用 Android 操作系统提供的 MediaSessionCompat 和 MediaBrowserServiceCompat 类。具体步骤如下: 1. 添加权限 在 AndroidManifest.xml 文件中添加以下权限:
2. 创建 MediaBrowserServiceCompat
创建一个继承自 MediaBrowserServiceCompat 的服务类。重写 onCreate() 方法,并在其中创建 MediaSessionCompat 对象:
public class MediaBrowserService extends MediaBrowserServiceCompat {
private MediaSessionCompat mediaSession; @Override public void onCreate() { super.onCreate(); // 创建媒体会话 mediaSession = new MediaSessionCompat(this, "MediaBrowserService"); // 设置回调 mediaSession.setCallback(new MediaSessionCallback()); // 开启媒体会话 setSessionToken(mediaSession.getSessionToken()); } // ...
}
3. 创建 MediaSessionCompat.Callback 创建一个继承自 MediaSessionCompat.Callback 的回调类。重写 onPlay()、onPause()、onStop()、onSeekTo() 等方法: ### 最后 愿你有一天,真爱自己,善待自己。 **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)**  **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** // 创建媒体会话 mediaSession = new MediaSessionCompat(this, "MediaBrowserService"); // 设置回调 mediaSession.setCallback(new MediaSessionCallback()); // 开启媒体会话 setSessionToken(mediaSession.getSessionToken()); } // ... }
创建一个继承自 MediaSessionCompat.Callback 的回调类。重写 onPlay()、onPause()、onStop()、onSeekTo() 等方法:
愿你有一天,真爱自己,善待自己。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-fZWVy0aA-1713028966977)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。